2013-04-11 82 views
5

我一直在安裝幾個節點包,我注意到的是NPM創建了一堆重複項。節點包管理器(NPM)似乎產生重複的包

例如,我首先安裝了mongoose,它自然會安裝一堆依賴項。然後,我安裝了mongodb軟件包,該軟件包還附帶了bson作爲依賴項。由於重疊的依賴,我有以下異常:

MongoDB是存在於以下目錄:

/usr/local/lib/node_modules/mongodb/ 
/usr/local/lib/node_modules/mongoose/node_modules/mongodb/ 

另外,BSON,mongodb的的依賴性是存在於這兩個:

/usr/local/lib/node_modules/mongodb/ 
/usr/local/lib/node_modules/mongoose/node_modules/mongodb/ 

我意識到這些只是千字節的文件,但我覺得這可能會產生很多冗餘結束,我可能會得到類似於以下的非常複雜的樹:

/usr/local/lib/node_modules/[something1]/node_modules/[something2]/node_modules/[something3/.../.../node_modules/[somethingX]/ 

在這種情況下,給定的[dependency]可能存在於/ usr/local/lib/node_modules下的X級別。

我主要關心的是更新這些模塊。我不覺得很難想象在同一時間安裝不同版本的併發模塊。

那豈不是更容易只是把一切都直接在/ usr/local/lib目錄/ node_modules /然後交叉引用的依賴?

回答

3

問題是,當貓鼬只編碼與的MongoDB說V1工作,而你編碼您的應用的MongoDB V2工作 - 因此,它安裝並加載了兩個版本,因此所有的作品。我們可以在節點中輕鬆完成此任務,因爲require模塊方式不會污染全局名稱空間,這與瀏覽器不同 - 由於全局名稱空間污染,這使得管理和包含正確的依賴關係成爲一場皇家痛苦。

現在,如果package.json和mongoose的package.json允許相同的mongodb版本(您可以指定特定的版本或範圍),那麼執行rm -Rf node_modules; npm install將只安裝一個mongodb副本,而不是兩個副本。但是如前所述,如果指定了多個版本,則會安裝並加載多個版本。

+0

在安裝了一堆不同的模塊並啓動了一堆不同的項目之後,這不會創建一個緊湊的層次嗎? 有沒有辦法用NPM運行遞歸更新? – zcserei 2013-04-11 12:20:39

+0

提供給人們的代碼是一些有待完成的小模塊,而不是大模塊,它們將始終保持更新,只安裝一個模塊副本。所以事實證明,實際上這並不是什麼大問題,因爲大多數節點模塊都很小,如果不是,他們會聽到substack(James Halliday - http://substack.net/)一段時間,並且然後確信也採用微觀的哲學:)前一段時間,我在這裏發佈了一些關於這個確切問題的想法:https://gist.github.com/balupton/5308717也許它會有所幫助,它花了我很多時間來到這也是:) – balupton 2013-04-11 12:25:02

+0

'if [both] ... allow the same [] version ... will only install one copy'爲什麼不這樣做呢?我有一個特殊情況,應該只使用一個副本,但正在安裝多個副本,並且需要很長時間,因爲......我不知道爲什麼,但每個實例都需要一段時間才能安裝! – Michael 2017-03-12 22:01:39