Чи потрібні мені і package-lock.json, і package.json?


149

Після оновлення свого NPM до останньої версії (від 3.X до 5.2.0) та запуску npm installіснуючого проекту я отримую автоматично створений package-lock.jsonфайл.

Я можу сказати, package-lock.jsonдає мені точне дерево залежності на відміну від package.json.

Тільки з цієї інформації, здається, вона package.jsonє зайвою і більше не потрібна.

Чи обоє вони необхідні для роботи НПМ?
Чи безпечно чи можливо використовувати лише package-lock.jsonфайл?

Документи на package-lock.json ( doc1 , doc2 ) нічого про це не згадують.

Редагувати :

Ще трохи подумавши про це, я прийшов до висновку, що якщо хтось хоче використовувати ваш проект зі старішою версією NPM (до 5.x), він все одно встановить усі залежності, але з менш точними версіями (версії патчів)


Відповіді:


103

Вам потрібно і те, package-lock.jsonі package.json? Ні .

Вам потрібна package.json? Так .

Чи можете у вас бути проект тільки з package-lock.json? Ні .

package.jsonВикористовуються для більш залежностей - як визначення властивостей проекту, опису, автор і ліцензії інформацію, скрипти і т.д. package-lock.jsonвиключно використовуються для залежностей блокування для ряду конкретних версій.


19

package-lock.json: записує точну версію кожного встановленого пакету, що дозволяє повторно встановити їх. Майбутні установки зможуть створити ідентичне дерево залежності.

package.json: записує мінімальну версію, яку потрібно додатку. Якщо ви оновлюєте версії певного пакету, зміна тут не відображатиметься.


1
Якщо вищезазначене вірно і package.jsonзаписує мінімальну версію, необхідну додатку, і пакет-lock.json записує точну версію кожного встановленого пакету, то у мене виникає дивна ситуація, коли модуль встановлений у версії 0.112.1 в пакеті .json та 0.110.0 в пакет-lock.json ...
Жан-Франсуа Бошан

6

Якщо у вас запитання, чи слід фіксувати файл блокування для вашого джерела контролю - він повинен. Він буде ігнорований за певних обставин.

Я виявив, що це запитання, які запитують, і записує історію, тож якщо ви бачите, що це змінюється, зробіть для цього окрему комісію.


1
Ні, я не питав про зобов’язання контролю над джерелами. Просто якщо НПМ потребує обох одночасно для роботи. package-lock.jsonвидається більш детальною версією package.json, тому безпечно чи можливо використовувати лише файл блокування.
Омрі Лусон

Я бачу, я залишив package.json у своїх проектах, головним чином, щоб було місце для сценаріїв npm.
Стенлі Кірдей

1
Зараз виникає окреме питання щодо того, чи можна ставити package-lock.jsonпід контроль версії.
Адріан Ш

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.