В этой статье мы узнаем о разнице между package.json и package-lock.json.

package.json или package-lock.json?

пакет.json

  • Он используется для установки пакетов в проекте Node.js.
  • Это не только для установки зависимостей, но и для других целей, таких как определение свойств проекта, описание, информация об авторе и лицензии, сценарии для запуска через npm и т. д.
  • Он сохраняет минимальную версию, необходимую приложению.
  • Обновление пакетов с использованием npm install приведет к обновлению изменений, связанных с информацией о пакете, в package-lock.json, а не в package.json.
    Примечание: вы можете прочитать https://techtalkbook.com/package -json-major-minor-and-patch-release, чтобы понять, как package.json используется для обновления пакетов новыми обновлениями.

пакет-lock.json

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

Как создать package-lock.json?

  • По умолчанию npm генерирует этот файл, когда мы запускаем npm install. (применимо для npm версии 5 или выше).
  • npm ниже версии 5 не создает этот файл по умолчанию, и его необходимо создать вручную, используя npm shrinkwrap как npm-shrinkwrap.json.
  • Если файл package-lock.json уже существует, команда npm обновит файл с обновленной информацией об установленном или обновленном пакете.

Можем ли мы отключить создание package-lock.json?

Да, можно выбрать, разрешать создание этого файла или нет.

  • Установив package-lock=false в ~/.npmrc, можно разрешить команде npm не создавать package-lock.json.
  • Если этот параметр выполняется глобально в системе и требуется создать его для конкретного проекта, мы можем передать параметр --package-lock с помощью команды npm как npm install --package-lock внутри проекта.

Что делать, если файла package-lock.json нет?

В файле package.json символ вставки указывает на необходимость установки или обновления пакета до самой последней основной версии.

Например:
Предположим, что "grunt": "^0.1.3" упоминается в файле package.json внутри проекта, и пакет уже установлен с этой версией.
Теперь, если будет доступно какое-либо новое обновление для этого пакета с версией 0.9.3 и если мы запустим npm install, тогда пакет будет обновлен с версии 0.1.3 до 0.9.3.

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

Почему package-lock.json?

Короче говоря: package-lock.json используется, чтобы избежать различий в установленных зависимостях в разных средах и генерировать одинаковые результаты в каждой среде.

Давайте посмотрим подробнее, почему package-lock.json?

  • Он используется для блокировки зависимости с установленными версиями, поэтому, когда кто-то настраивает приложение путем клонирования кодовой базы либо в локальной системе, либо во время миграции приложения, все ранее установленные пакеты будут установлены с теми же версиями и зависимостями.
  • NPM устанавливает точные версии пакета, сохраненные в package-lock.json, и игнорирует символы ^ и ~ из package.json, чтобы избежать установки последней/обновленной версии пакета, которая может нарушить работу приложения, если кодовая база приложения не совместим с обновленной версией пакетов.
  • Он содержит другую метаинформацию о пакетах, чтобы сэкономить время на получение этих данных из npm при установке любого пакета с помощью npm install.
  • Это позволяет npm пропускать повторные разрешения метаданных для ранее установленных пакетов и, следовательно, оптимизирует процесс установки.
  • Это позволяет видеть предыдущие состояния node_modules без фиксации самого каталога.

Заключение

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

Итак, теперь я думаю, вы поняли разницу между package.json и package-lock.json и использованием package-lock.json.

  • Нужны ли нам и package-lock.json, и package.json?
    Нет, нам не нужны оба, но теперь мы знаем, что может произойти, если у нас нет package-lock.json в нашей кодовой базе.
  • Нужен ли нам package.json?
    Да, нам нужен package.json, это основной файл, который npm ищет во время установки пакета.
  • Можем ли мы иметь проект только с package-lock.json?
    Нет, так как npm требуется package.json для установки пакета, только package-lock.json не будет работать, так как это просто ссылка для npm для поиска при установке пакетов с точными версиями для пакетов, упомянутых в package.json.

Я надеюсь, что вам понравилась эта статья и поможет вам решить ваши проблемы.

Посетите Techtalkbook, чтобы найти другие связанные темы.

Ссылки

Первоначально опубликовано на https://techtalkbook.com 29 декабря 2020 г.