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