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



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



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



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

742   7  

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 будет полностью проигнорирована.

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

вы можете проверить официальные документы: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>

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

Comments

    Ничего не найдено.