Пакетные менеджеры: npm, yarn, pnpm, lock-файлы, semver
↑ 6.2 Сборка и инфраструктура: Vite, monorepo, CI∕CD · ← Предыдущая · → Следующая
Зачем это на собесе
Воспроизводимость сборок и безопасность зависимостей.
Объяснение
| Менеджер | Особенности |
|---|---|
| npm | стандарт с Node.js, плоский node_modules |
| Yarn (Classic v1, Berry v2+) | workspaces, Plug’n’Play (Berry), zero-installs |
| pnpm | контентно-адресуемое хранилище + жёсткие ссылки: экономия диска, скорость, строгая структура (нет «фантомных» зависимостей) |
| Bun | быстрый рантайм и менеджер |
semver MAJOR.MINOR.PATCH: major — ломающие изменения, minor — обратно совместимые новые возможности, patch — исправления.
| Диапазон | Значение |
|---|---|
1.2.3 | ровно |
^1.2.3 | >=1.2.3 <2.0.0 (по умолчанию в npm) |
~1.2.3 | >=1.2.3 <1.3.0 |
>=, *, latest | опасно широкие |
Pre-release 1.0.0-beta.2 | нестабильные |
Lock-файл (package-lock.json, yarn.lock, pnpm-lock.yaml) фиксирует точное дерево зависимостей и хэши — воспроизводимая установка. Коммитьте lock-файл.
npm ci # строго по lock-файлу, чистая установка (CI)
npm install # может обновить lock
pnpm install --frozen-lockfile
npm outdated / npm update / npx npm-check-updates -u
npm audit --omit=dev / npm audit fix
npm ls <pkg> / npm why <pkg> # почему пакет в дереве
npm overrides / pnpm.overrides # принудительные версии транзитивных зависимостейРазделы package.json: dependencies (прод), devDependencies (сборка/тесты), peerDependencies (ожидаемые версии у хоста, для библиотек), optionalDependencies, engines, scripts, sideEffects, exports, type.
Безопасность цепочки поставок: npm audit, Dependabot/Renovate, подтверждение обновлений тестами, минимальные права установочных скриптов (ignore-scripts), проверка новых пакетов (typosquatting), provenance, защита от dependency confusion (scoped-пакеты, приватный реестр).
Нюансы и подводные камни
npm installвместоnpm ciв CI даёт невоспроизводимые сборки.- Смешивание менеджеров в одном проекте портит lock-файлы.
^для0.xверсий ведёт себя строже (^0.2.3=>=0.2.3 <0.3.0).- Конфликты peer-зависимостей:
--legacy-peer-deps— временный костыль. - Доверие к
postinstall-скриптам сторонних пакетов — риск.
Практика
- Проверьте, что в CI используется
npm ci/--frozen-lockfileи lock-файл закоммичен. - Найдите причину появления пакета через
npm why. - Настройте Renovate/Dependabot с группировкой обновлений.
Вопросы с ответами
Чем
npm ciотличается отnpm install?
ciустанавливает строго по lock-файлу и удаляетnode_modules, гарантируя воспроизводимость;installможет изменить lock.
Что означает
^1.2.3?Любая версия от 1.2.3 до, но не включая, 2.0.0.