2015-10-24 119 views
16

我剛剛升級到npm version 3,並注意到它所做的最大改變之一是它強制執行flat dependency tree如何強制npm 3安裝嵌套的依賴關係?

現在,您的依賴關係將被最大限度地平放。只要有可能,您的所有依賴項及其依賴項和他們的依賴項都將安裝在您的項目的node_modules文件夾中,且不會嵌套。當兩個(或更多)模塊具有衝突的依賴關係時,您只會看到嵌套在另一個下面的模塊。

因此,舉例來說,如果包一個依賴於包,當你npm install A你會得到這個文件的結構:

--- root/ 
|--- node_modules/ 
    |--- A/ 
    |--- B/ 

,而不是舊的文件結構從版本2或更低:

--- root/ 
|--- node_modules/ 
    |--- A/ 
    |--- node_modules/ 
     |--- B/ 

我遇到的第一個問題(我肯定不是最後一個問題)是:

程序包A不知道npm v3的行爲並依賴於程序包B。但A採用舊的(v2)文件結構,因爲它的代碼中有node_modules/B,而不是正確的../node_modules/B。現在從A的代碼將不會編譯,因爲它正在尋找B/在錯誤的目錄中。

如果我不喜歡嘮叨開發人員修復代碼並等待一個的更新,我不知道是否有一種方法,我可以設置一個選項,這將迫使NPM安裝一個的它自己的node_modules文件夾內的依賴關係,npm v2也會這樣做。

回答

20

你試過--legacy-bundlingnpm install

https://docs.npmjs.com/cli/install

的--legacy捆紮參數將導致NPM安裝包,使得之前1.4 NPM的版本,例如一個包含節點0.8,可以安裝軟件包。這消除了所有自動重複數據刪除。

1

這是我沒有得到足夠的睡眠時發生的情況。不知何故,這個明顯的解決方案逃脫了我

$ cd node_modules/A/ 
$ npm install 
$ cd ../../ 
+1

我遇到同樣的問題,我希望有,因爲這一個你必須去一個更好的解決方案:'CD node_modules/A && NPM install'然後'CD node_modules/A/node_modules/B && NPM安裝「等......從我所瞭解的情況來看,所有的包必須遵循新的npm句柄依賴關係,才能使用npm 3.0,對吧? – Gabin

+0

@加賓據我所知,你是對的。它使升級依賴成爲一場噩夢。 – chharvey

0

我剛剛遇到此問題,並找到了解決此問題的替代方法。由於Node.js帶有NPM,我能想到的唯一方法是降級到Node.js 0.10版本,該版本隨NPM上的舊版本一起提供,該版本將以舊時尚方式安裝依賴項。降級我使用NVM並運行nvm use 0.10.0。按照這個技巧,你可以在npm版本之間來回切換。希望能幫助到你!

+0

我會試試看看它是否有效。我也相信你的陳述「NPM附帶Node.js」是錯誤的;這是相反的方式。節點安裝了npm。 – chharvey

+0

是的。我只是修復它。謝謝! – Diego

+0

謝謝。我認爲措辭只是令人困惑。因爲當你說「npm帶有節點」時,這可能意味着* npm隨節點*一起安裝,也就是說,當你安裝npm時,你會自動獲得節點(不正確);或者* npm隨節點*一起安裝,即安裝節點會給你一個npm(正確)的副本。英語很愚蠢。 – chharvey