it-roy-ru.com

Package-lock.json - требует зависимости от

В package-lock.json в объекте зависимостей у меня есть поля requires и dependencies, например

  "requires": {
    "@angular-devkit/core": "0.8.5",
    "rxjs": "6.2.2",
    "tree-kill": "1.2.0",
    "webpack-sources": "1.3.0"
  },
  "dependencies": {
    "rxjs": {
      "version": "6.2.2",
      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.2.tgz",
      "integrity": "sha512-0MI8+mkKAXZUF9vMrEoPnaoHkfzBPP4IGwUYRJhIRJF6/w3uByO1e91bEHn8zd43RdkTMKiooYKmwz7RH6zfOQ==",
      "dev": true,
      "requires": {
        "tslib": "1.9.3"
      }
    }
  }

В чем разница между этими двумя? Почему некоторые зависимости перечислены в requires, другие в dependencies, а некоторые из них в обоих этих полях?

6
Krzysztof Grzybek

Начнем с самого начала, с docs.npmjs :

Требуется: 

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

Значение Требуется отображает ваши модули и все, что требуется конкретному модулю для правильной работы, независимо от того, где вы его установили. 

Например, чтобы ваши модули работали, у вас должен быть установлен "@angular-devkit/core": "0.8.5", через npm i.


Зависимости: 

Зависимости этой зависимости, точно так же, как на верхнем уровне.

Просто так, как это звучит. 


Разница: 

Требуется, указывает модули, которые являются обязательными для вашего приложения для правильной работы и работы.

Dependencies, перечисляет зависимости в вашем приложении точно так же, как на верхнем уровне.

Значение зависимостей, чтобы прояснить ситуацию

Отображение имени пакета на объект зависимости.

1
Barr J

Подробное объяснение, основанное на Барр J ответ:

По умолчанию npm устанавливает все пакеты непосредственно в node_modules.

Однако предположим, что пакет X зависит от пакета Z в версии 1.0, а пакет Y зависит от того же пакета Z, но в версии 2.0. В этом случае мы должны установить две версии этого пакета. Один будет установлен в корневую папку node_modules, а другой будет установлен в папку node_modules зависимого пакета, например,.

package.json
node_modules
   /X
   /Y
      /[email protected]
   /[email protected]

С этим знанием легко понять:

«require» отражает зависимости из файла package.json, тогда как «dependencies» отражает фактически установленные зависимости в папке node_modules этой зависимости.

1
Krzysztof Grzybek