例如,为什么Grunt插件将其对grunt的依赖关系定义为“ 对等依赖关系 ”?
为什么插件在grunt-plug / node_modules中不能仅仅将Grunt作为其依赖项?
对等依赖项在此处进行了描述:https : //nodejs.org/en/blog/npm/peer-dependencies/
但是我真的不明白。
例
目前,我正在使用AppGyver Steroids,它使用Grunt任务将我的源文件构建到/ dist /文件夹中,以便在本地设备上提供服务。我在npm上很新,很咕gr,所以我想完全理解发生了什么。
到目前为止,我得到了:
[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插件(或其他插件)发生冲突?
peerDependencies
用最简单的示例进行解释:在myPackage中运行npm install会引发错误,因为它试图安装React版本
^15.0.0
ANDfoo
并且仅与React兼容^16.0.0
。没有安装peerDependencies。