Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

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

#javascript #nodejs #frontend #npm #package


Доброе время суток.
Я почитал документацию к 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. Т.е нам не нужен промежуточный файл получается.

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


Ответы

Ответ 1



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

Комментариев нет:

Отправить комментарий