Package-lock.json - требует зависимости vs
В 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
и некоторые из них в обоих этих полях?
Ответы
Ответ 1
Пусть начнется с начала, с docs.npmjs:
Требуется:
Это сопоставление имени модуля с версией. Это список всего, что требует этот модуль, независимо от того, где он будет установлен. Версия должна соответствовать нормальным правилам соответствия зависимости либо в наших зависимостях, либо на уровне выше нас.
Значение Требуется сопоставление ваших модулей и всего, что требуется конкретному модулю для правильной работы, независимо от того, где вы его установили.
Например, для того, чтобы ваши модули работали, вы должны иметь "@angular-devkit/core": "0.8.5",
установленный через npm i
.
зависимости:
Зависимости этой зависимости, как и на верхнем уровне.
Просто так звучит.
Разница:
Требуется, заявляет модули, которые необходимы для запуска и работы вашего приложения.
Зависимости. Перечисляет зависимости в приложении так же, как и на верхнем уровне.
Значение зависимостей, чтобы сделать вещи более ясными
Отображение имени пакета для объекта зависимостей.
Ответ 2
Подробное объяснение, основанное на ответе Барра 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 этой зависимости.
Ответ 3
Прочитав ответы выше. Может быть, я могу выразить это более простым способом
requires
может быть совместно используемым среди всех других зависимостей верхнего уровня, тогда как dependencies
является автономным, принадлежность только модулю требует его
т.е.
"@angular-devkit/core": "0.8.5"
, "tree-kill": "1.2.0"
, "webpack-sources": "1.3.0"
не принадлежат только модулю, они находятся на том же уровне, что и модуль. Напротив, "rxjs": "6.2.2"
существует исключительно потому, что модуль требует его. И это используется только модулем