Есть ли способ заставить npm сгенерировать package-lock.json?

132

Я удалил его случайно и с тех пор внес в него много изменений package.json. npm installИли npm updateне генерируют package-lock.jsonбольше. Я попытался очистить кеш npm и nvm, но, похоже, ничего не работает. Я пробовал его на нескольких версиях Node.js (6.10.3 Node.js - 3.10.10 npm - это то, над чем я бы хотел, чтобы он работал), и он не работает ни на одном.

Есть ли способ заставить npm сгенерировать package-lock.jsonфайл?

Большие деньги
источник
2
Я думаю, package-lock.json специфичен для npm 5
Бретт Меррифилд,
3
package-lock.jsonгенерируется автоматически по умолчанию в npm, начиная с v5, в предыдущих версиях имя файла блокировки было, npm-shrinkwrap.jsonи оно создавалось вручную с помощью npm shrinkwrapкоманды.
Alexmac
@BrettMerrifield Спасибо! Это была моя проблема. Я обновился до node 8.6.0и с ним, npm 5.3.0и это сработало.
Big Money
Проверьте свой .gitignore. Я случайно попал package-lock.jsonв это, .gitignoreи потому что package-lock.jsonне появлялся в git statusнем, это меня сбивало с толку.
Джошуа Пинтер

Ответы:

156

По умолчанию package-lock.jsonобновляется при каждом запуске npm install. Тем не менее, это может быть отключен глобально, установив package-lock=falseв ~/.npmrc.

Когда глобальная package-lock=falseнастройка активна, вы все равно можете принудительно package-lock.jsonобновить файл проекта, запустив:

npm install --package-lock

Эта команда - единственный верный способ принудительного package-lock.jsonобновления.

Матиас Байненс
источник
@RonNewcomb Не могли бы вы поделиться дополнительной информацией? Что вы имеете в виду под «не работает»? Какую версию npm вы используете?
Матиас Байненс
npm version 3.10.10 Node 6.10.3 Указанная вами команда не работает? Ничего не произошло. Ни ошибки, ни изменения файла, ничего.
Рон Ньюкомб
2
Если вы используете npm v3 для своего проекта, у вас не будет package-lock.json. package-lock.jsonподдерживается только в npm v5 +.
Матиас Байненс,
8
npm v 6.4.1, и это не создает package-lock.json
mjuopperi
1
У меня работает, в 6.4.1. Установка значения false также предотвращает его создание.
Kevin B
94

В npm 6.x вы можете использовать

npm i --package-lock-only

Согласно https://docs.npmjs.com/cli/install.html

Аргумент --package-lock-only обновляет только package-lock.json, вместо проверки node_modules и загрузки зависимостей.

Януш Пшибыльски
источник
12
Сейчас это правильный ответ, другие старые и не работают.
Vaibhav Singh
Любая подсказка, как создать package-lock.json без devDependencies? Мне это нужно для чистой производственной установки. npm i --package-lock-only --only=productionпохоже, не работает.
Роберт
Я не думаю, что можно сгенерировать package-lock.jsonтолько производственные зависимости. Но если вы запустите, npm i --only=productionон должен установить только производственные зависимости. Таким образом, ваш процесс сборки может выглядеть так: установить все зависимости, создать приложение, удалить node_modulesи установить только производственные зависимости.
Януш Пшибыльский
14

На это ответят в комментариях; package-lock.jsonэто функция в npmверсии 5 и выше. npm shrinkwrapкак вы создаете файл блокировки во всех версиях npm.

LJHarb
источник
1
обратите внимание, однако, что package-lock.jsonфайлы s - это не то же самое, что и файлы shrinkwrap.
Strugee 09
7
в npm 5+ они фактически одинаковы, вплоть до каждой детали, за исключением одного: npm-shrinkwrap.jsonбудут опубликованы в реестре и package-lock.jsonне будут.
LJHarb
6
Ага. Это довольно важное различие, поэтому я оставил свой комментарий.
Strugee 09
1
npm shrinkwrapгенерирует npm-shrinkwrap.json, но как вы генерируете package-lock.json?
Vic
5
Это автоматически в npm 5+, или вы можете форсировать его в 5+ с--package-lock
LJHarb
1

Как объяснялось в нескольких ответах, вы должны запустить:

npm i

НО если не решит ...

Проверьте версию вашего npmисполняемого файла. (Для меня это был 3.xx, который не использует package-lock.json(вообще))

npm -v

Он должен быть не ниже 5.xx (в котором представлен файл package-lock.json.)

Чтобы обновить npm в Lunix, следуйте этим инструкциям.

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

betontalpfa
источник
0

Если НАЯ версия ниже , чем версия 5 установите более позднюю версию для получения автоматической генерации пакетов-lock.json .

Пример: обновите текущий npm до версии 6.14.0

npm i -g npm@6.14.0

Вы можете просмотреть список последних версий npm по

npm view npm versions
SridharKritha
источник
-3

package-lock.json генерируется заново при каждом запуске npm i.

Mcanic
источник
13
Это верно только для определенных версий nodeи npm. Я думаю, что это npm> = 5.0и node> = 7.0, но я не уверен в этом на 100%. У меня не работает node 6.11.3.
Thor84no
2
Также неверно, если для параметра package-lock в конфигурации npm установлено значение false. Используйте 'npm config list' для проверки
Дамо
package-lock.json автоматически создается для любых операций, в которых npm изменяет дерево node_modules или package.json. По адресу docs.npmjs.com/files/package-lock.json . Но версия npm не указана.
NanoNova