2012-06-27 67 views
59

假設你想安裝一個庫lib-a,它有依賴項dep-1dep-2。如果lib-a已在其package.json中聲明使用已過期的dep-2版本(假設它在剛剛發佈的節點0.8.0上不起作用),但是有一個支持節點0.8的dep-2分支.0 - 分行名稱node0.8.0使用NPM安裝軟件包時,您能否告訴它使用其某個依賴項的不同版本?

所以公式中的包:

git://github.com/user-a/lib-a 
git://github.com/user-b/dep-1 
git://github.com/user-c/dep-2 
git://github.com/user-c/dep-2#node0.8.0 

有沒有辦法告訴NPM安裝lib-a,但使用dep-2#node0.8.0代替dep-2

隨着NPM可以安裝這樣一個項目的具體分支:

npm install git://github.com/user-c/dep-2#node0.8.0 

如果我是定製的lib-a的的package.json,你可以告訴它使用dep-2#node0.8.0這樣的:

{ 
    "name": "lib-a", 
    "dependencies": { 
    "dep-1": ">= 1.5.0", 
    "dep-2": "git://github.com/user-c/dep-2#node0.8.0" 
    } 
} 

通過修改的package.json,你可以運行

npm install lib-a 

它將安裝與節點0.8.0兼容的dep-2分支。但是,這需要我有權修改lib-a,對於我的具體情況我不這樣做。從技術上講,我可以分叉lib-a並對package.json進行上述更改。但在我的特定情況下,lib-a另一庫的依賴性,所以我不得不叉項目它引用的,和和...

因此問題是,是有辦法告訴NPM安裝lib-a,並告訴它使用dep-2node0.8.0分支?這樣的事情:

npm install lib-a --overrides dep-2:git://github.com/user-c/dep-2#node0.8.0 

這將是太棒了。如果這是不可能的,那將是很好的知道,所以我可以準備自己必須分叉/定製項目鏈。

回答

42

NPM安裝語法:

npm install (with no args in a package dir) 
npm install <tarball file> 
npm install <tarball url> 
npm install <folder> 
npm install [@<scope>/]<name> [--save|--save-dev|--save-optional] [--save-exact] 
npm install [@<scope>/]<name>@<tag> 
npm install [@<scope>/]<name>@<version> 
npm install [@<scope>/]<name>@<version range> 
npm i (with any of the previous argument usage) 

所以你可以選擇其中一種方法來安裝模塊。

的安裝特定的版本,最簡單的辦法的情況下是這樣的一個:

npm install [email protected] 

更多信息: https://docs.npmjs.com/cli/install

+6

它看起來就像如果你安裝的依賴,然後再到其他庫需要該依賴不會自行下載。解決了這個問題!謝謝! –

+1

這是正確的嗎?我嘗試了npm -g install/path/to/my/fork-with-fix,然後npm -g安裝package-which-should-use-fork-dependency -with-fix並...它仍然下載正式版本。 –

+0

看看'npm link'。 – knownasilya

相關問題