2012-03-13 221 views
6

我有一個關於管理npm嵌套依賴的最佳實踐的問題。npm嵌套依賴管理

讓我解釋一下我的情況,請告訴我我做錯了什麼,或者解決這個問題的最好方法是什麼。

我使用express.js和express-mongostore在nodeenv中運行應用程序。由於nodeenv,我在全局npm-everything,所以它們都在nenv/lib/node_modules文件夾下。事情是,我正在嘗試發展express.js,而express-mongostore在一段時間內沒有更新。安裝這兩個模塊後,我得到這個文件夾結構。

nodeenv/lib/node_modules/express/node_modules/connect/.. 
          /
          /connect-mongodb/node_modules/ connect/... 

那麼最終發生的是我有2個不同的連接版本。

我被燒了,因爲由mongodb存儲生成的cookie和會話中間件生成的cookie不同,因爲它們指向2個不同的connect utils實現(一個調用store調用utils,另一個調用utils直接。 ,他們在需要解析期間指向不同的文件)。這裏的實際區別是他們使用不同的算法對cookie進行簽名。有一段時間,我的會話每次頁面加載都會使自己失效,花了很長時間才能調試到這個級別。

我在網上閱讀,似乎這應該是npm的方式和好東西。這裏的問題在於,由於express依賴於連接中的一些utils,connect-mongodb繼承了連接中的一些相同的類,讓它們具有不同的回購是有問題的。

我目前仍然有2個版本的連接,我修補了一個像其他。很明顯,這不是一個可持續的解決方案。在這種情況下,我應該如何繼續並處理依賴關係管理?

在此先感謝!

回答

3

您可以運行npm dedupe將兼容的依賴關係移動到樹上。因此,假設express和connect-mongodb可以使用相同版本的連接,那麼您最終會得到如下的樹:

nodeenv/lib/node_modules/express/... 
          /
          /connect-mongodb/... 
          /
          /connect/... 
-3

您正在體驗兩個模塊之間的基本不兼容性,這兩個模塊假定它們可以相互配合。

這不是NPM或其設計中的缺陷。您將需要自己解決邏輯問題。