2014-09-26 92 views
1

如果我有一個node.js應用程序有數百個引用模塊(比如下劃線)的文件,並且我想用另一個模塊替換(比如說lodash),那麼顯而易見的方法要做這個替換將是一個全局名稱替換,並將package.json文件中的模塊切換出來。Substance在node.js中的另一個模塊

有沒有辦法改變名稱引用的模塊,以便當node.js看到require('moduleA')時,它實際上會加載'moduleB'?現在我知道這會導致命名地獄,因爲任何在項目上工作的人都會看到require('moduleA')並且不知道被加載的真正模塊是'moduleB',所以最終你可能會想要與第一個解。我想到的用例是,如果您想嘗試一些API兼容模塊的替代方法來測量每個模塊的應用程序性能(例如)。

回答

2

如果這是一個正在進行的事情,你想保持的能力往往選項之間在程序中切換,比如在測試:

而不是使用require("underscore");整個代碼庫的,需要一個本地文件而不是像require("./lib/underscore");,並有文件有條件再出口下劃線或不同的庫:

if (global.USE_LODASH) { 
    module.exports = require("lodash"); 
} else { 
    module.exports = require("underscore"); 
} 

如果這是一個一次性的事情做對SWI的決定之前,嘗試另一種庫TCH,並且你想快速先做這個測試沒有查找和替換所有文件:

轉到您的node_modules文件夾裏面,刪除或重命名underscore文件夾,並創建一個名爲下劃線來替換符號鏈接模塊的文件夾。我不建議這是一個長期的解決方案:再次運行npm install可能會取消這種破解,大多數項目選擇避免將node_modules文件夾檢入其源代碼庫。

0

嘗試使用mock-require模塊。

相關問題