Почему, например, плагин Grunt определяет свою зависимость от grunt как « равноправные зависимости »?
Почему плагин не может просто иметь Grunt как свою собственную зависимость в grunt-plug / node_modules ?
Зависимости пира описаны здесь: https://nodejs.org/en/blog/npm/peer-dependencies/
Но я не совсем понимаю.
пример
Сейчас я работаю со стероидами AppGyver, которые используют задачи Grunt для создания моих исходных файлов в папке / dist / для обслуживания на локальном устройстве. Я совершенно новый в npm и хрюкаю, поэтому я хочу полностью понять, что происходит.
Пока я получаю это:
[rootfolder] /package.json сообщает npm, что это зависит от grunt-steroids
пакета npm для разработки:
"devDependencies": {
"grunt-steroids": "0.x"
},
Ладно. Запуск npm install в [rootfolder] обнаруживает зависимость и устанавливает grunt-стероиды в [rootfolder] / node_modules / grunt-steroids .
Затем Npm читает [rootfolder] /node_modules/grunt-steroids/package.json, чтобы установить grunt-steroids
собственные зависимости.
"devDependencies": {
"grunt-contrib-nodeunit": "0.3.0",
"grunt": "0.4.4"
},
"dependencies": {
"wrench": "1.5.4",
"chalk": "0.3.0",
"xml2js": "0.4.1",
"lodash": "2.4.1"
},
"peerDependencies": {
"grunt": "0.4.4",
"grunt-contrib-copy": "0.5.0",
"grunt-contrib-clean": "0.5.0",
"grunt-contrib-concat": "0.4.0",
"grunt-contrib-coffee": "0.10.1",
"grunt-contrib-sass": "0.7.3",
"grunt-extend-config": "0.9.2"
},
Пакеты " зависимостей " устанавливаются в [rootfolder] / node_modules / grunt-steroids / node_modules, что логично для меня.
« DevDependencies » не установлены, что, я уверен, контролируется npm, определяющим, что я просто пытаюсь использовать grunt-steroids
, а не развиваться на нем.
Но тогда у нас есть " peerDependencies ".
Они установлены в [rootfolder] / node_modules , и я не понимаю, почему там, а не в [rootfolder] / node_modules / grunt-steroids / node_modules, чтобы избежать конфликтов с другими подключаемыми плагинами (или чем-то еще)?
"grunt": "0.4.4"
это как в devDependencies, так и в peerDependencies, и для меня имеет смысл иметь там дубликат, потому что это означает, что мне нужен и этотgrunt
пакет для моего собственного использования, а также то, что пользователи моего библиотека может использовать свою собственную версию, если она учитывает блокировку версии peerDependencies. Это правильно? Или пример ОП очень плохой?