Есть ли способ заставить 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.


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, следуйте этим инструкциям.

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


0

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

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

npm i -g npm@6.14.0

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

npm view npm versions

-3

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.