В этой статье мы узнаем об основных различиях между #ackage-json и #package-lock-json и их потребностях в node js.

В Node.js , package.json - это файл управления версиями, используемый для установки нескольких пакетов в вашем проекте. При инициализации вашего приложения node в вашем приложении будут установлены три файла: node_modulespackage.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 возьмёт оттуда все версии и раскатит их точно так же, как раскатил их на компьютере разработчика.