С выпуском npm @ 5 теперь будет записываться, package-lock.json
если a не npm-shrinkwrap.json
существует.
Я установил npm @ 5 глобально через:
npm install npm@5 -g
А теперь, если в npm-shrinkwrap.json
течение:
npm install
предупреждение будет напечатано:
npm WARN read-shrinkwrap This version of npm
is compatible with lockfileVersion@1,
but npm-shrinkwrap.json was generated for lockfileVersion@0.
I'll try to do my best with it!
Итак, мой вывод, что я должен заменить термоусадочную пленку на package-lock.json
.
Но почему для него появился новый формат? Что может package-lock.json
сделать то, что npm-shrinkwrap.json
не может?
источник
package-lock.json
(что невозможно), то , если вы должны были установить эту библиотеку в качестве зависимости какой - либо другой пакет, то библиотекиpackage-lock.json
будут игнорироваться НПМ. Однако, если библиотека публикуетnpm-shrinkwrap.json
, и вы устанавливаете библиотеку как зависимость, то вы также установите в качестве вторичных зависимостей точные версии всех зависимостей, указанных в библиотекеnpm-shrinkwrap.json
.npm ci
существует, чтобы обеспечить установку только дляpackage-lock.json
чтения. (npm install
мутируетpackage-lock.json
вызывающую путаницу и потенциальные ошибки и не пользуется преимуществомpackage-lock.json
per se.)npm ci
обрабатывается,npm-shrinkwrap.json
иpackage-lock.json
- какое отношение это имеет к этому вопросу о разнице между двумя файлами? Кроме того, после прочтения: я думаю, что «npm install
... не использует преимуществаpackage-lock.json
» было ложным с npm 5.4 -npm install
теперь я верю, что вы уважаете вас,package-lock
если только это не будет полностью несовместимо с вашимpackage.json
, и в этом случае последний будет иметь приоритет. (Но я немного вышел из мира JavaScript - я что-то упустил?)Объяснение от NPM Developer :
источник
npm-shrinkwrap
для точных node_modules .... Я предполагаю,package-lock.json
что блокировка менее точна? И если так, что не блокировка, котораяnpm-shrinkwrap
блокирует?npm-shrinkwrap
. Как я отмечаю в своем ответе, преобразование apackage-lock.json
в anpm-shrinkwrap.json
буквально выполняется путем переименования файла; они являются «тот же самый код».Я думаю, что идея заключалась в том, чтобы по умолчанию иметь место - сохранение и сжатие, но избегать возможных проблем с созданием сжатия, когда они не нужны. Таким образом, они просто дали ему новое имя файла, чтобы избежать конфликтов. Кто-то из npm объяснил это более подробно здесь:
https://www.reddit.com/r/javascript/comments/6dgnnq/npm_v500_released_save_by_default_lockfile_better/di3mjuk/
Соответствующая цитата:
источник