将node.js中的另一个模块replace为另一个模块

如果我有一个node.js应用程序有数百个引用模块的文件(比如下划线),并且我想用另一个模块(比如说lodash)来代替这个模块,那么做这个replace的一个显而易见的方法就是使用一个全局名称replace和switch从package.json文件中取出模块。

有没有办法只是改变名称引用的模块,以便当node.js看到require('moduleA')它实际上加载“moduleB”而不是? 现在我知道这会导致命名地狱,因为任何在项目上工作的人都会看到require('moduleA')并且不知道被加载的真正模块是'moduleB',所以最终你可能会想要第一个解。 我正在考虑的用例是,如果您想尝试一些API兼容模块的替代方法来测量每个模块的应用程序性能(例如)。

如果这是一个正在进行的事情,而且你希望保持经常在选项之间进行编程切换的能力,比如在testing中:

而不是使用require("underscore"); 在整个代码库中,需要一个本地文件,而不是require("./lib/underscore"); ,并有条件地重新导出下划线或不同的库:

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

如果这是在决定切换之前尝试使用另一个库的一次性事情,而且您希望在不查找和replace所有文件的情况下快速执行此testing:

进入node_modules文件夹,删除或重命名underscore文件夹,并将名为下划线的符号链接添加到replace模块的文件夹中。 我不build议这是一个长期的解决scheme:再次运行npm install可能会解决这个问题,大多数项目select避免将node_modules文件夹检入到其源存储库。

尝试使用mock-require模块。