Совершаю ли я блокировку пакета.файл json, созданный npm 5?

npm 5 был выпущен сегодня и одна из новых функций включает детерминированные установки с созданием .

этот файл должен храниться в системе контроля версий?

Я предполагаю, что это похоже на yarn.lock и composer.lock, оба из которых должны храниться в системе управления версиями.

7 ответов


да package-lock.json предназначен для проверки в системе управления версиями. Если вы используете npm 5, Вы можете увидеть это в командной строке: created a lockfile as package-lock.json. You should commit this file. по данным npm help package-lock.json:

package-lock.json автоматически генерируется для любых операций, где npm изменяет либо node_modules дерево, или package.json. Он описывает точное дерево, которое было создано, так что последующие установки могут создание идентичных деревьев, независимо от промежуточной зависимости новинки.

этот файл предназначен для фиксации в репозитории источник, и подают различные цели:

  • опишите одно представление дерева зависимостей таким образом, чтобы товарищи по команде, развертывания и непрерывная интеграция гарантированно устанавливали точно такие же зависимости.

  • предоставить пользователям возможность "путешествовать во времени" в предыдущие состояния node_modules без фиксации сам каталог.

  • для облегчения большей видимости изменений дерева с помощью читаемых различий управления версиями.

  • и оптимизировать процесс установки, позволяя npm пропустить повторные разрешения метаданных для ранее установленных пакетов.

одна ключевая деталь, о package-lock.json Это то, что он не может быть опубликован, и это будет проигнорирован, если найден в любом месте, кроме пакета верхнего уровня. Он доли формат с npm-shrinkwrap.json (5), который по существу является тем же файлом, но разрешает публикацию. Это не рекомендуется, если развертывание инструмента CLI или в противном случае используется процесс публикации для создания производственных пакетов.

если как package-lock.json и npm-shrinkwrap.json присутствуют в корне пакет, package-lock.json будет полностью проигнорирована.


Да, он предназначен для регистрации. Я хочу предложить, чтобы он получил свой собственный уникальный commit. Мы обнаруживаем, что это добавляет много шума к нашим различиям.


вы можете проверить официальные документы:https://docs.npmjs.com/files/package-lock.json

Да, вы можете зафиксировать этот файл. package-lock.json автоматически генерируется для любых операций, где npm изменяет либо node_modules дерево, или package.json. Он описывает точное дерево, которое было создано, так что последующие установки могут генерировать идентичные деревья, независимо от промежуточных обновлений зависимостей.


да, лучшая практика, чтобы проверить в

Я согласен, что это вызовет много шума или конфликта при просмотре разницы. Но преимущества:

  1. гарантируйте точно такую же версию каждого пакета. Эта часть является наиболее важной при строительстве в различных средах в разное время. Вы можете использовать ^1.2.3 в своем package.json, но как можно обеспечить каждый раз npm install подберет ту же версию на вашем компьютере dev и в сервер сборки, особенно эти пакеты косвенных зависимостей? Ну,package-lock.json обеспечит это. (С помощью npm ci который устанавливает пакеты на основе файла блокировки)
  2. улучшает процесс установки.
  3. это помогает с новой функцией проверки npm audit fix (Я думаю, что функция аудита из npm версии 6).

Я не фиксирую этот файл в своих проектах. Какой смысл ?

  1. создания
  2. это причина ошибки целостности кода SHA1 в gitlab с gitlab-ci.в формате YML строит

хотя это правда, что я никогда не использую ^ в мой пакет.json для libs, потому что у меня был плохой опыт с ним:)

с уважением.


людям, жалующимся на шум при выполнении git diff:

git diff -- . ':(exclude)*package-lock.json'

я использовал псевдоним

alias gd="git diff --ignore-all-space --ignore-space-at-eol --ignore-space-change --ignore-blank-lines -- . ':(exclude)*package-lock.json'"

Примечание: во-первых, я не смог сделать предложенное ниже решение работает, но я чувствую, что с большим количеством знаний о предмете мы можем заставить его работать. Дай мне знать, помогло ли это тебе или моему пониманию. о npm-merge-driver - это неправильно.

как говорят многие здесь it will cause a lot of noise or conflict в таком случае запустите:

npx npm-merge-driver install -g

и

npx npm-merge-driver install
$ git merge my-conflicting-branch
npm WARN conflict A git conflict was detected in package-lock.json. Attempting to auto-resolve.

added 1 package in 0.077s
Auto-merging package-lock.json
Merge made by the 'recursive' strategy.
 package-lock.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
$ git status
<clean>

Проверьте больше документов здесь:https://www.npmjs.com/package/npm-merge-driver