package-lock.json

Тема дорожной карты · Node.js

package-lock.json — это автоматически генерируемый lockfile, который npm создаёт рядом с package.json для записи точной разрешённой версии каждой зависимости и транзитивной зависимости, установленной в дереве node_modules проекта Node.js. Файл package-lock.json гарантирует детерминированные установки — при запуске npm ci в CI/CD или Docker-сборке проекты Node.js получают точно такой же граф зависимостей, как у разработчика, который последний раз обновлял lockfile, предотвращая класс ошибок «работает на моей машине». В отличие от package.json, задающего диапазоны версий с помощью операторов semver ^ или ~, package-lock.json закрепляет каждый пакет на конкретной разрешённой версии с контрольной суммой целостности, позволяя реестру npm верифицировать загрузки. Файл package-lock.json всегда должен быть зафиксирован в системе контроля версий в прикладных проектах, чтобы все члены команды и конвейеры деплоя разделяли одинаковое дерево зависимостей; при публикации npm-пакета его следует исключать с помощью .npmignore. Запуск npm update или изменение зависимости в package.json регенерирует package-lock.json, а проверка diff в ходе code review является лучшей практикой безопасности для обнаружения неожиданных изменений транзитивных зависимостей.

Как это работает

package-lock.json трекает зависимости через package.json и пинит точную резолюцию в package-lock.json (npm), pnpm-lock.yaml (pnpm) или yarn.lock (yarn). Версии — semver (^1.2.3 пускает minor + patch; ~1.2.3 только patch; 1.2.3 строго). npm install (или pnpm install) читает manifest, резолвит граф, пишет lockfile, складывает пакеты в node_modules. pnpm — content-addressed store + симлинки; npm — копирует; runtime-резолюция одинакова.

Когда применять

pnpm — в monorepo и на dev-машинах с несколькими проектами; экономия диска + скорость реальны. npm — если хотите нулевое трение для новых контрибьюторов (он идёт с Node). Lockfile всегда коммитьте; в CI никогда npm install без него (npm ci / pnpm install --frozen-lockfile). Регулярно npm audit и npm outdated. Закрепляйте major-версии в package.json, когда стабильность важнее свежих фич.

Типичные ошибки

Ловушки package-lock.json: удаление package-lock.json "чтобы сбросить" (пересобираете всё дерево deps, можете втянуть breaking patch); npm install в CI вместо npm ci (lockfile тихо меняется); годами игнорируемые npm audit (CVE копятся); глобальные установки (npm i -g) на shared-машинах (path-коллизии). npx или pnpm dlx — для одноразовых бинарей.

Связанные понятия

Полезные ресурсы