Warum definiert beispielsweise ein Grunt-Plugin seine Abhängigkeit von Grunt als " Peer-Abhängigkeiten "?
Warum kann das Plugin nicht einfach Grunt als eigene Abhängigkeit in grunt-plug / node_modules haben ?
Peer-Abhängigkeiten werden hier beschrieben: https://nodejs.org/en/blog/npm/peer-dependencies/
Aber ich verstehe es nicht wirklich.
Beispiel
Ich arbeite zurzeit mit AppGyver-Steroiden, die Grunt-Tasks verwenden, um meine Quelldateien in einem Ordner / dist / zu erstellen, der auf einem lokalen Gerät bereitgestellt werden soll. Ich bin ziemlich neu bei npm und grunze, also möchte ich vollständig verstehen, was los ist.
Bisher verstehe ich das:
[rootfolder] /package.json teilt npm mit, dass es grunt-steroids
für die Entwicklung vom npm-Paket abhängt :
"devDependencies": {
"grunt-steroids": "0.x"
},
In Ordnung. Wenn Sie npm install in [rootfolder] ausführen, wird die Abhängigkeit erkannt und grunt-steroids in [rootfolder] / node_modules / grunt-steroids installiert .
Npm liest dann [rootfolder] /node_modules/grunt-steroids/package.json, damit es grunt-steroids
eigene Abhängigkeiten installieren kann :
"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"
},
Die " Abhängigkeiten " -Pakete werden in [rootfolder] / node_modules / grunt-steroids / node_modules installiert, was für mich logisch ist.
Die " devDependencies " sind nicht installiert, was sicher durch die Erkennung von npm gesteuert wird, die ich nur zu verwenden versuche grunt-steroids
und nicht darauf entwickle.
Aber dann haben wir die " peerDependencies ".
Diese sind in [rootfolder] / node_modules installiert , und ich verstehe nicht, warum und nicht in [rootfolder] / node_modules / grunt-steroids / node_modules, damit Konflikte mit anderen Grunt-Plugins (oder was auch immer) vermieden werden?
"grunt": "0.4.4"
sowohl in devDependencies als auch in peerDependencies der Fall ist, und es ist für mich sinnvoll, dort ein Duplikat zu haben, da dies sowohl bedeutet, dass ich diesesgrunt
Paket für meinen eigenen Gebrauch benötige , als auch, dass die Benutzer von my Die Bibliothek kann ihre eigene Version verwenden, sofern die Versionssperre für peerDependencies eingehalten wird. Ist das korrekt? Oder ist das OP-Beispiel sehr schlecht?