2011-12-19 57 views
1

如果我需要一個已經安裝作爲另一個模塊的子依賴項的npm模塊,我還應該使用npm來安裝嗎?node.js中的重疊依賴關係

例如,KUE需要的Redis所以紅色安裝有KUE例如 NPM安裝KUE

/node_modules/kue/node_modules/redis 

我應該還是安裝Redis的爲好,因此NPM安裝Redis的

/node_modules/redis/ 

還是有辦法,我可以添加到從KUE安裝Redis的一個參考我需要聲明

require("/node_modules/kue/node_modules/redis") 

,而不是

require ("redis") 

還是有更好的方法嗎?

回答

0

這裏有一個一般的經驗法則:

如果require('module-name')在應用程序的源代碼,您應該列出module-name作爲一個依賴。將依賴關係的依賴關係視爲不透明的實現細節,而不關心它們。

這使得KUE依賴於不同的Redis模塊版本比你的應用程序,或轉出其實施完全不同的模塊。所有這些都不影響您的應用

節點的模塊系統比「常規的」一個(例如紅寶石)不同,在相同的模塊的多個版本可以以相同的過程,而不會造成衝突被加載。開始時感覺有點不對勁,但隨它而去,你會很快看到好處。我懷疑,隨着社區進一步探索Node的這個方面,我們會看到一些有趣的項目可以利用它。

0

只需在本地安裝redis。

如果你想要一個不同版本的Redis的那麼一個與KUE安裝?當你更新kue的版本時,如果redis版本突然變化怎麼辦?

你真的不應該,只要預期的關心node_modules的內容require(module)作品。節省幾kbs的源代碼是不值得的。

0

您不應該在意自己安裝模塊和依賴項,請讓NPM爲您完成。例如,由於Kue(或其他模塊取決於Redis)可能需要特定版本,並且其他某個模塊可能需要另一個版本,因此,例如僅安裝一次Redis並不是那麼好。

NPM爲你做所有的工作,只需npm install package,然後require('package')在你的代碼。正如@Raynos所說的,保存幾千碼的代碼並不是什麼大事,甚至會讓你陷入困境。