Нужны ли мне как 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), он все равно установит все зависимости, но с менее точными версиями (версиями исправлений).

Омри Лузон
источник
3
ссылка
Лакшмиприя Мукундан

Ответы:

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
0

Более точное и подробное объяснение причины сохранения package-lock.json можно найти здесь

Вивек Гоэль
источник