我正在開發一個節點模塊my-module
,而這又取決於另一個模塊other-module
。因此,other-module
是我的模塊的package.json中明確列出的依賴項。如何避免節點需要加載相同的模塊兩次
正如我的模塊只是作爲require
d修改的other-module
的行爲,是非常重要的other-module
只加載一次,而這,一個和唯一的「實例」是既需要my
整個任何應用程序所引用的一個和other
。
我預計今年根據節點的模塊緩存策略持有真實的,但我已經遇到在寫一個簡單的測試程序是這樣的:
如果my-module
是npm install
版other-module
然後之前,後者被帶到作爲前者的依賴。 npm install
ing other-module
之後再次將其帶入node_modules層次結構中。然後,當我的模塊需要other-module
時,節點加載我的模塊的「本地」副本,並且當應用程序require
第二次節點加載它再次(此時由於第二個npm install
而安裝的版本)。這顯然不是預期的結果。
如果my-module
是npm installe
d 後other-module
然後我結束了在node_modules的other-module
只有一個副本和我的測試應用程序工作正常。
這種行爲讓我翻翻節點的相關政策再次果然我碰到了「模塊緩存注意事項」:
模塊都是基於他們解決文件名緩存。由於模塊可能會根據調用模塊的位置(從node_modules文件夾加載)解析爲不同的文件名,因此它不能保證require('foo')總是返回完全相同的對象,如果它解析爲不同的文件。
在這一點上,它看起來像我的模塊可能會或可能不會按預期的行爲取決於npm install
s的順序。
我錯過了哪些最佳做法?有沒有什麼辦法可以避免這種混亂而不改變我的模塊的工作方式?