Чому, наприклад, плагін Grunt визначає свою залежність від grunt як " однорангову залежність "?
Чому плагін не може мати Grunt як власну залежність у grunt-plug / node_modules ?
Тут описані залежності від рівних: https://nodejs.org/en/blog/npm/peer-dependitions/
Але я насправді не розумію.
Приклад
На даний момент я працюю з AppGyver Steroids, який використовує завдання Grunt для зведення моїх вихідних файлів у / dist / папку для подання на локальному пристрої. Я зовсім новий в npm та бурчання, тому хочу повністю зрозуміти, що відбувається.
Поки що я розумію:
[rootfolder] /package.json повідомляє npm, що залежить від grunt-steroids
пакету npm для розробки:
"devDependencies": {
"grunt-steroids": "0.x"
},
Добре. Запуск npm install у [rootfolder] виявляє залежність та встановлює grunt-steroids у [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, що для мене є логічним.
" DevDependitions " не встановлено, що, я впевнений, контролюється npm виявленням, яке я просто намагаюся використовувати grunt-steroids
, а не розвиватися на ньому.
Але тоді у нас є " peerDependitions ".
Вони встановлені в [rootfolder] / node_modules , і я не розумію, чому там, а не в [rootfolder] / node_modules / grunt-steroids / node_modules, щоб уникнути конфліктів з іншими плагінами grunt (або будь-яким іншим)?
"grunt": "0.4.4"
це і в devDependpendes, і в peerDependpendes, і для мене є сенс мати там дублікат, тому що це означає, що мені потрібен цейgrunt
пакет для мого власного використання, але і що мої користувачі бібліотека може використовувати власну версію, якщо вона дотримується блокування версії peerDependitions. Це правильно? Або приклад ОП дуже поганий?