在node.js中将一个模块替换为另一个模块

时间:2014-09-26 21:09:12

标签: javascript node.js module require

如果我有一个node.js应用程序,它有数百个引用模块的文件(比如下划线),我想用另一个模块替换那个模块(比如lodash),那么做这个替换的显而易见的方法就是全局名称替换并切换package.json文件中的模块。

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

2 个答案:

答案 0 :(得分:2)

如果这是一个正在进行的事情,并且您希望保持以编程方式在选项之间切换的能力,例如在测试中:

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

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

如果在决定切换之前尝试替代库是一次性的事情,并且您希望在没有查找和替换所有文件的情况下快速执行此测试:

进入node_modules文件夹,删除或重命名underscore文件夹,并将名为underscore的符号链接添加到替换模块的文件夹中。我不建议将其作为长期解决方案:再次运行npm install可能会撤消此黑客攻击,大多数项目都会选择避免将node_modules文件夹检入其源存储库。

答案 1 :(得分:0)

尝试使用mock-require模块。