Чи є спосіб змусити 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
Brett Merrifield

3
package-lock.jsonгенерується автоматично за замовчуванням у npm, починаючи з v5, у попередніх версіях ім'я файлу блокування було npm-shrinkwrap.jsonі генерується вручну за допомогою npm shrinkwrapкоманди.
alexmac

@BrettMerrifield Дякую! Це була моя проблема. Я оновив до node 8.6.0нього, npm 5.3.0і це спрацювало.
Великі гроші

Перевірте своє .gitignore. Я випадково опинився package-lock.jsonв .gitignoreчомусь, і тому, що package-lock.jsonне з'являвся в git statusньому, це мене викидало.
Джошуа Пінтер

Відповіді:


155

За замовчуванням 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 версія 3.10.10 Вузол 6.10.3 Здається, що перерахована вами команда є неоперативною? Нічого не відбувається. Ні помилки, ні зміни файлу, нічого.
Рон Ньюкомб

2
Якщо ви використовуєте npm v3 для свого проекту, у вас не було б package-lock.json. package-lock.jsonпідтримується лише npm v5 +.
Mathias Bynens

8
npm v 6.4.1, і це не створює package-lock.json
mjuopperi

1
Це працює для мене, в 6.4.1. Якщо встановити значення false, також не дозволяє створити його.
Кевін Б

94

У npm 6.x ви можете використовувати

npm i --package-lock-only

Відповідно до https://docs.npmjs.com/cli/install.html

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


12
Це правильна відповідь зараз, інші - старі та звичні роботи.
Сінгх

Будь-яка підказка, як генерувати пакет-lock.json без devDependitions? Мені це потрібно для встановлення чистого виробництва. npm i --package-lock-only --only=productionСхоже, не працює.
Роберт

Я не думаю, що можливо генерувати package-lock.jsonлише виробничі залежності. Але якщо запустити, npm i --only=productionслід встановити лише виробничі залежності. Отже ваш процес збирання може виглядати так: встановити всі залежності, створити додаток, видалити node_modulesта встановити лише виробничі залежності.
Януш Пшибильський

14

На це відповідають у коментарях; package-lock.jsonє особливістю npmv5 і вище. npm shrinkwrapтак ви створюєте файл блокування у всіх версіях програми npm.


1
зауважте, однак, що package-lock.jsons - це не та сама річ, як файли, що скорочуються.
strugee

7
в npm 5+ вони насправді точно такі самі, до кожної деталі, крім однієї речі: npm-shrinkwrap.jsonбудуть опубліковані в реєстрі, і package-lock.jsonне будуть.
LJHarb

6
Так. Це досить важлива різниця, тому я залишив свій коментар.
strugee

1
npm shrinkwrapгенерує npm-shrinkwrap.json, але як ви генеруєте package-lock.json?
Вік

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

Якщо ваша версія npm нижча за версію 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
Також не вірно, якщо в налаштуваннях npm для параметра lock-lock встановлено значення 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.