¿Por qué, por ejemplo, un complemento de Grunt define su dependencia de Grunt como " dependencias entre pares "?
¿Por qué el complemento no puede tener Grunt como su propia dependencia en grunt-plug / node_modules ?
Las dependencias entre pares se describen aquí: https://nodejs.org/en/blog/npm/peer-dependencies/
Pero realmente no lo entiendo.
Ejemplo
Estoy trabajando con AppGyver Steroids en este momento, que utiliza tareas de Grunt para construir mis archivos de origen en una carpeta / dist / para que se sirvan en un dispositivo local. Soy bastante nuevo en npm y gruñido, así que quiero comprender completamente lo que está sucediendo.
Hasta ahora entiendo esto:
[rootfolder] /package.json le dice a npm que depende del grunt-steroids
paquete npm para el desarrollo:
"devDependencies": {
"grunt-steroids": "0.x"
},
Bueno. La ejecución de npm install en [rootfolder] detecta la dependencia e instala grunt-steroids en [rootfolder] / node_modules / grunt-steroids .
Npm luego lee [rootfolder] /node_modules/grunt-steroids/package.json para que pueda instalar sus grunt-steroids
propias dependencias .:
"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"
},
Los paquetes de " dependencias " se instalan en [rootfolder] / node_modules / grunt-steroids / node_modules, lo cual es lógico para mí.
Las " devDependencies " no están instaladas, lo que estoy seguro es controlado por npm detectando que solo estoy tratando de usar grunt-steroids
, y no desarrollarlo.
Pero luego tenemos las " dependencias de pares ".
Estos se instalan en [rootfolder] / node_modules , y no entiendo por qué allí y no en [rootfolder] / node_modules / grunt-steroids / node_modules para evitar conflictos con otros plugins grunt (o lo que sea).
"grunt": "0.4.4"
es tanto en devDependencies como en peerDependencies, y tiene sentido para mí tener un duplicado allí, porque significa que necesito esegrunt
paquete para mi propio uso, pero también que los usuarios de mi la biblioteca puede usar su propia versión, siempre que respete el bloqueo de versión de peerDependencies ¿Es eso correcto? ¿O el ejemplo de OP es muy malo?