npm依賴管理peerDependencies

npm中dependencies與peerDependencies區(qū)別
假設(shè)我們當(dāng)前的項(xiàng)目是MyProject,項(xiàng)目中有一些依賴,比方其中有一個依賴包PackageA,該包的package.json文件指定了對PackageB的依賴:
{"dependencies": {"PackageB": "1.0.0"}}
如果我們在我們的MyProject項(xiàng)目中執(zhí)行npm install PackageA, 我們會發(fā)現(xiàn)我們項(xiàng)目的目錄結(jié)構(gòu)會是如下形式:
MyProject|- node_modules|- PackageA|- node_modules|- PackageB
那么在我們的項(xiàng)目中,我們能通過下面語句引入"PackageA":
var packageA = require('PackageA')但是,如果你想在項(xiàng)目中直接引用PackageB:
var packageA = require('PackageA')var packageB = require('PackageB')
這是不行的,即使PackageB被安裝過;因?yàn)镹ode只會在“MyProject/node_modules”目錄下查找PackageB,它不會在進(jìn)入PackageA模塊下的node_modules下查找。
所以,為了解決這個問題,在MyProject項(xiàng)目package.json中我們必須直接聲明對PackageB的依賴并安裝。
但是,有時我們不用在當(dāng)前項(xiàng)目中聲明對PackageB的依賴就可以直接引用,為什么在項(xiàng)目中不用聲明就可以直接使用呢?這就不得不說說peerDependencies的作用了。
于是peerDependencies就被引入了。例如上面PackageA的package.json文件如果是下面這樣:
{"peerDependencies": {"PackageB": "1.0.0"}}
那么,它會告訴npm:如果某個package把我列為依賴的話,那么那個package也必需應(yīng)該有對PackageB的依賴。
也就是說,如果你 npm install PackageA,你將會得到下面的如下的目錄結(jié)構(gòu):
MyProject|- node_modules|- PackageA|- PackageB
總結(jié)一句話,peerDependencies的具體作用:
peerDependencies的目的是提示宿主環(huán)境去安裝滿足插件peerDependencies所指定依賴的包,然后在插件import或者require所依賴的包的時候,永遠(yuǎn)都是引用宿主環(huán)境統(tǒng)一安裝的npm包,最終解決插件與所依賴包不一致的問題。
