Por que, por exemplo, um plug-in Grunt define sua dependência do grunt como " dependências de pares "?
Por que o plug-in não pode ter apenas o Grunt como sua própria dependência no grunt-plug / node_modules ?
As dependências entre pares são descritas aqui: https://nodejs.org/en/blog/npm/peer-dependencies/
Mas eu realmente não entendo.
Exemplo
No momento, estou trabalhando com o AppGyver Steroids, que usa as tarefas do Grunt para criar meus arquivos de origem em uma pasta / dist / para ser exibido em um dispositivo local. Eu sou muito novo na NPM e grunhido, então eu quero compreender completamente o que está acontecendo.
Até agora eu entendi:
[rootfolder] /package.json diz ao npm que depende do grunt-steroids
pacote npm para desenvolvimento:
"devDependencies": {
"grunt-steroids": "0.x"
},
OK. A execução do npm install no [rootfolder] detecta a dependência e instala grunt-steroids em [rootfolder] / node_modules / grunt-steroids .
O Npm então lê [rootfolder] /node_modules/grunt-steroids/package.json para poder instalar suas grunt-steroids
próprias dependências .:
"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"
},
Os pacotes " dependências " são instalados em [rootfolder] / node_modules / grunt-steroids / node_modules, o que é lógico para mim.
O " devDependencies " não está instalado, o que eu tenho certeza que é controlado pelo npm detectando que estou apenas tentando usar grunt-steroids
, e não desenvolvendo.
Mas temos o " peerDependencies ".
Eles estão instalados em [rootfolder] / node_modules , e não entendo por que existe e não em [rootfolder] / node_modules / grunt-steroids / node_modules para que conflitos com outros plugins de grunhido (ou o que seja) sejam evitados?
"grunt": "0.4.4"
é tanto em devDependencies quanto em peerDependencies, e faz sentido ter uma duplicata lá, porque significa tanto que eu preciso dessegrunt
pacote para meu próprio uso, mas também que os usuários do meu A biblioteca pode usar sua própria versão, desde que respeite o bloqueio de versão peerDependencies. Isso está correto? Ou o exemplo do OP é muito ruim?