Для изменения node_modules дерева или любого действия package.json NPM автоматически генерируется package-lock.json. Он описывает конкретное дерево, которое генерируется, чтобы последующие установки могли генерировать то же дерево, независимо от промежуточных обновлений зависимостей.
Этот файл предназначен для отправки в репозиторий исходного кода и доступен для различных целей:
Описывает единое представление дерева зависимостей, чтобы гарантировать, что участники команды, развертывания и непрерывная интеграция обеспечивают установку абсолютно одинаковых зависимостей.
Предоставить пользователям инструмент для «перехода» в предыдущее состояние node_modules без необходимости коммитировать сам каталог.
Облегчить лучшую видимость изменений деревьев за счёт читаемых различий в системе управления исходным кодом.
И оптимизировать процесс установки, позволяя npm пропускать дублирование разрешения метаданных ранее установленных пакетов.
Ключевая деталь package-lock.json заключается в том, что его нельзя выпустить, и он будет игнорирован, если он найдётся где-либо вне топового пакета. Формат похож на npm-shrinkwrap.json, по сути это тот же файл, но позволяет публиковать. Это не рекомендуется, если только вы не внедряете CLI-инструмент или не используете процесс релиза для создания производственного пакета.
Если и package-lock.json, и npm-shrinkwrap.json существуют в корневой директории пакета, package-lock.json будет полностью игнорироваться.
Оригинальная ссылка: https://docs.npmjs.com/files/package-lock.json
С момента выхода npm 5.x роль блокировки 5.6.0 менялась много раз, и теперь многие мелкие белые тексты в Интернете застрели в предыдущем переводе документов.
Я обновил с npm3.x до npm5, но обнаружил, что явление при выполнении 'npm i' не соответствует популярной научной статье в Интернете.
Упоминается, что независимо от того, как package.json файл изменяется, если npm i выполняется многократно, npm будет скачана согласно информации о версии, описанной в файле блокировки.
Также упоминается, что при повторении npm i npm игнорирует информацию о блокировке и скачает модуль обновления согласно информации о версии версии пакета в package.json (блокировка, похоже, бесполезна).
**Согласно информации, правила npm i менялись три раза с момента выхода npm 5.0. **
1. NPM 5.0.x версии, независимо от того, как меняется package.json, npm i будет скачана согласно файлу блокировки
package-lock.json файл не обновляется после того package.json как файл был изменён · Выпуск #16866 · НПМ/НПМ https://github.com/npm/npm/issues/16866 Эта проблема жалуется на эту проблему, очевидно, я менял package.json вручную, почему бы вам не предложить мне пакет обновления! А затем это приводит к проблеме 5.1.0...
2. После версии 5.1.0 установка npm игнорирует файл блокировки для загрузки последнего npm
Тогда кто-то поднял этот вопрос: почему блокировка пакета игнорируется? · Выпуск #17979 · НПМ/НПМ https://github.com/npm/npm/issues/17979 Жалоба со временем эволюционировала в правила после версии 5.4.2.
3. После версии 5.4.2 почему блокировка пакета игнорируется? · Выпуск #17979 · НПМ/НПМ https://github.com/npm/npm/issues/17979
Грубо говоря, если package.json изменен, и package.json отличается от файла блокировки, npm скачает последний пакет согласно номеру версии и семантическому смыслу при выполнении 'npm i' и обновит его до блокировки.
Если оба находятся в одном состоянии, то при выполнении npm я скачиваю по блокировке, независимо от того, новая ли версия пакета.
|