Для чего нужен package-lock.json?

147
11 июня 2019, 01:10

Доброе время суток. Я почитал документацию к NPM, почитал форумы, но всё равно до конца не совсем понимаю, смысловую нагрузку этого файла.

Вот то что описано на npm документации:

Этот файл предназначен для фиксации в исходных хранилищах и предназначен для различных целей:

1) Описывает единственное представление дерева зависимостей, чтобы товарищи по команде, разворачивая проект гарантированно установил одинаковые зависимости.

2) Предоставьте пользователям возможность «путешествовать во времени» к предыдущим состояниям node_modules без фиксации самого каталога.

3) Для облегчения большей видимости изменений в дереве с помощью читаемых исходных текстов контроля.

4) И оптимизировать процесс установки, позволяя npm пропускать повторяющиеся установленные пакеты.

Вопрос сразу по 1 пункту, ибо у меня package.json и package-lock.json не в гит игноре! Они комитятся. И как написано в той же документашке, когда мы делаем npm i, пакетный менеджер устанавливает зависимости, которые описаны в файле package.json. И скачав очередную библиотеку мы идем внутрь неё и устанавливаем её зависимости (и так рекурсивно). На данном этапе в package-lock.json просто выводится информация какие внутренние зависимости основных библиотек мы скачали. Как оно помогает "гарантированно установил одинаковые зависимости" ?

И это всё полностью вытекает из 3 пункта.

Ну и согласен с 4 пунктом, по факту если в node_modules уже есть такой пакет (с той же версией и хешем), то его устанавливать не будут. НО, опять же эту инфу можно смотреть не по package-lock.json, а в зависимостях основного пакета, ибо почти у каждой либы есть внутренний package.json. Т.е нам не нужен промежуточный файл получается.

Верно ли я все понимаю? Пожалуйста, поправьте!

Answer 1

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

Наличие package-lock.json в проекте не обязательно. Так же для отключение автоматического создания этого файла ты можешь в .npmrc прописать package-lock=false

READ ALSO
Как передать данные из браузера?

Как передать данные из браузера?

У меня есть простенькое расширение для Google Chrome которое получает Url открытой вкладки и выводит его на экран

125
localStorage JS как правильно использовать

localStorage JS как правильно использовать

Всем привет! Недавно начал изучать JS, при создании "ToDo" формы столкнулся с тем, что после обновления страницы пропадают все добавленные делаУзнал...

105
Превращение блоков в друг друга

Превращение блоков в друг друга

Изначально на странице отображается только блок redКак сделать чтобы при наведении на блок red он превращался в блок green, а при отведении - обратно...

93
Как сделать так, чтобы при перезагрузке страницы открывалась вторая вкладка?

Как сделать так, чтобы при перезагрузке страницы открывалась вторая вкладка?

Есть кастомная корзина на woocommerce с двумя вкладками: на первом шаге отображается заказ, а на втором - форма контактной информации покупателя...

85