В этой статье мы узнаем об основных различиях между #ackage-json и #package-lock-json и их потребностях в node js.
В Node.js , package.json - это файл управления версиями, используемый для установки нескольких пакетов в вашем проекте. При инициализации вашего приложения node в вашем приложении будут установлены три файла: node_modules, package.json и package.lock.json.
Вы можете инициализировать проект узла, выполнив приведенную ниже команду-npm init
После инициализации ваш package.json будет выглядеть примерно так.
{
"name": "Your project name",
"version": "1.0.0",
"description": "Your project description",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
},
"author": "Author name",
"license": "ISC",
"dependencies": {
"dependency1": "^1.4.0",
"dependency2": "^1.5.2"
}
}
Как мы можем видеть выше, файл package.json содержит метаданные о проекте, а также функциональные зависимости, которые требуются приложению.
Ниже показано, как выглядит типичный файл package.lock.json,
{
"name": "Your project name",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"dependency1": {
"version": "1.4.0",
"resolved":
"https://registry.npmjs.org/dependency1/-/dependency1-1.4.0.tgz",
"integrity":
"sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
},
"dependency2": {
"version": "1.5.2",
"resolved":
"https://registry.npmjs.org/dependency2/-/dependency2-1.5.2.tgz",
"integrity":
"sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ=="
}
}
}
Но вопрос в том, почему package.lock.json необходим, когда у вас есть package.json в вашем проектном приложении. package.lock.json создается для блокировки зависимости от установленной версии.
Он установит точную последнюю версию этого пакета в ваше приложение и сохранит его в package.json. Допустим, если текущая версия пакета 1.3.2, то она сохранит версию со знаком (^). Здесь carot(^) означает, что он будет поддерживать любую более высокую версию с основной версией 1, например. 1.2.2.
Без package.lock.json могут быть некоторые различия в установленных версиях в разных средах. Чтобы преодолеть эту проблему, package.lock.json создается для получения одинаковых результатов в любой среде. Он должен находиться в системе управления версиями с файлом package.json, потому что, если какой-либо другой пользователь будет клонировать проект и устанавливать зависимости, он установит точно такие же зависимости, как в package.lock.json, чтобы избежать различий.
Ниже приведены основные различия между ними,
package.json
- Он содержит основную информацию о проекте.
- Это обязательно для каждого проекта.
- Он записывает важные метаданные о проекте.
- Он содержит такую информацию, как имя, описание, автор, сценарий и зависимости.
package.lock.json
- Он описывает точное дерево, которое было сгенерировано, чтобы позволить последующим установкам иметь идентичное дерево.
- Он автоматически генерируется для тех операций, где npm изменяет либо дерево node_modules, либо package.json.
- Это позволяет будущим разработчикам устанавливать те же зависимости в проекте.
- Он содержит имя, зависимости и заблокированную версию проекта.
Простым языком,
package.json составляется программистом, который указывает желаемые версии пакетов (а там может быть и нестрогое указание) и их категорию. package-lock.json формируется автоматически, он содержит перечень версий всех реально установленных пакетов и пакетов, установленных по зависимостям. Суть в том, что если lock-файл не противоречит package.json (и установка выполнена через npm ci), то npm возьмёт оттуда все версии и раскатит их точно так же, как раскатил их на компьютере разработчика.