例如,为什么Grunt插件将其对grunt的依赖关系定义为“ 对等依赖关系 ”?
为什么插件不能仅在Grunt -plug / node_modules中将 Grunt作为其依赖项?
对等依赖项在此处进行了描述:https : //nodejs.org/en/blog/npm/peer-dependencies/
但是我真的不明白。
例
目前,我正在使用AppGyver Steroids,它使用Grunt任务将我的源文件构建到/ dist /文件夹中,以便在本地设备上提供服务。我在npm上很新,很咕unt,所以我想完全理解发生了什么。
到目前为止,我得到了:
[rootfolder] /package.json告诉npm它依赖于grunt-steroids
npm包进行开发:
"devDependencies": {
"grunt-steroids": "0.x"
},
好的。在[rootfolder]中运行npm install 可以检测依赖性,并在[rootfolder] / node_modules / grunt-steroids中安装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中,这对我来说很合理。
未安装“ devDependencies ”,我确定这是由npm检测控制的,即我只是在尝试使用grunt-steroids
而不是在上面进行开发。
但是然后我们有了“ peerDependencies ”。
这些安装在[rootfolder] / node_modules中,我不明白为什么在[rootfolder] / node_modules / grunt-steroids / node_modules中而不安装在其中,从而避免了与其他grunt插件(或其他)的冲突?
"grunt": "0.4.4"
既存在于devDependencies中,又存在于peerDependencies中,在那儿有一个副本确实是有意义的,因为这意味着我既需要该grunt
程序包供自己使用,也需要我的用户使用只要遵守peerDependencies版本锁定,库就可以使用自己的版本。那是对的吗?还是OP的例子很糟糕?