Нужны ли мне как package-lock.json, так и package.json?


149

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

Я могу сказать, package-lock.jsonдает мне точное дерево зависимостей в отличие от package.json.

Из этой информации кажется, что package.jsonона избыточна и больше не нужна.

Обе ли они необходимы для работы NPM?
Безопасно или возможно использовать только 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записывает минимальную версию, необходимую для приложения, а package-lock.json записывает точную версию каждого установленного пакета, то у меня странная ситуация, когда модуль установлен в пакете версии 0.112.1 в пакете .json и 0.110.0 в package-lock.json ...
Жан-Франсуа Бошан

6

Если ваш вопрос заключается в том, должен ли файл блокировки быть передан вашему контролю над исходным кодом - он должен это сделать. Это будет игнорироваться при определенных обстоятельствах.

Я обнаружил, что это раздутые запросы на выборку и история коммитов, поэтому, если вы видите, что это изменилось, сделайте отдельный коммит для него.


1
Нет, я не спрашивал о коммитах с контролем версий. Просто если NPM нуждается в них обоих одновременно для работы. package-lock.jsonкажется более подробной версией package.json, поэтому безопасно или возможно использовать только файл блокировки.
Омри Лусон

Я вижу, что я оставил package.json в своих проектах, главным образом, чтобы иметь место для сценариев npm.
Стэнли

1
Теперь возникает отдельный вопрос о том, стоит ли ставить package-lock.jsonпод контроль версий.
Адриан W

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