2014-09-26 53 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模块。

相关问题