Pourquoi, par exemple, un plugin Grunt définit-il sa dépendance vis-à-vis de grunt comme des " dépendances entre pairs "?
Pourquoi le plugin ne peut-il pas simplement avoir Grunt comme sa propre dépendance dans grunt-plug / node_modules ?
Les dépendances entre pairs sont décrites ici: https://nodejs.org/en/blog/npm/peer-dependencies/
Mais je ne comprends pas vraiment.
Exemple
Je travaille actuellement avec AppGyver Steroids qui utilise des tâches Grunt pour créer mes fichiers sources dans un dossier / dist / à servir sur un appareil local. Je suis tout à fait nouveau à npm et grognement, donc je veux bien comprendre ce qui se passe.
Jusqu'à présent, je comprends ceci:
[rootfolder] /package.json indique à npm que cela dépend du grunt-steroids
package npm pour le développement:
"devDependencies": {
"grunt-steroids": "0.x"
},
D'accord. L'exécution de npm install dans [rootfolder] détecte la dépendance et installe grunt-steroids dans [rootfolder] / node_modules / grunt-steroids .
Npm lit ensuite [rootfolder] /node_modules/grunt-steroids/package.json pour pouvoir installer ses grunt-steroids
propres dépendances .:
"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"
},
Les packages " dépendances " sont installés dans [rootfolder] / node_modules / grunt-steroids / node_modules, ce qui est logique pour moi.
Les " devDependencies " ne sont pas installés, ce qui, j'en suis sûr, est contrôlé par la détection de npm que j'essaie simplement d'utiliser grunt-steroids
, et que je ne développe pas dessus.
Mais alors nous avons les " pairsDépendances ".
Ceux-ci sont installés dans [rootfolder] / node_modules , et je ne comprends pas pourquoi là-bas et pas dans [rootfolder] / node_modules / grunt-steroids / node_modules afin d' éviter les conflits avec d'autres plugins grunt (ou autre)?
"grunt": "0.4.4"
c'est à la fois dans devDependencies et peerDependencies, et cela a du sens pour moi d'avoir un doublon là, car cela signifie à la fois que j'ai besoin de cegrunt
package pour mon propre usage, mais aussi que les utilisateurs de mon La bibliothèque peut utiliser sa propre version, tant qu'elle respecte le verrou de version peerDependencies. Est-ce exact? Ou l'exemple OP est-il très mauvais?