Совершаю ли я блокировку пакета.файл 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.2.3
в своемpackage.json
, но как можно обеспечить каждый разnpm install
подберет ту же версию на вашем компьютере dev и в сервер сборки, особенно эти пакеты косвенных зависимостей? Ну,package-lock.json
обеспечит это. (С помощьюnpm ci
который устанавливает пакеты на основе файла блокировки) - улучшает процесс установки.
- это помогает с новой функцией проверки
npm audit fix
(Я думаю, что функция аудита из npm версии 6).
Я не фиксирую этот файл в своих проектах. Какой смысл ?
- создания
- это причина ошибки целостности кода 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