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

Javascript 在node.js中将一个模块替换为另一个模块,javascript,node.js,module,require,Javascript,Node.js,Module,Require,如果我有一个node.js应用程序,它有数百个引用某个模块的文件(比如下划线),并且我想用另一个模块(比如lodash)替换该模块,那么执行此替换的明显方法就是使用全局名称替换package.json文件中的模块 是否有必要只更改名称所指的模块,以便node.js在看到require('moduleA')时实际加载'moduleB'?现在我知道这会导致命名地狱,因为任何在项目中工作的人都会看到require('moduleA'),而不知道加载的真正模块是'moduleB',所以最终您可能会希望使

如果我有一个node.js应用程序,它有数百个引用某个模块的文件(比如下划线),并且我想用另一个模块(比如lodash)替换该模块,那么执行此替换的明显方法就是使用全局名称替换package.json文件中的模块


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

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

而不是使用
require(“下划线”)在整个代码库中,需要一个本地文件,如
require(“./lib/下划线”),并使该文件有条件地重新导出下划线或其他库:

if (global.USE_LODASH) {
  module.exports = require("lodash");
} else {
  module.exports = require("underscore");
}
如果在做出切换决定之前尝试其他库是一次性的,并且您希望先快速执行此测试,而无需在所有文件中查找和替换:


进入您的
节点\u模块
文件夹,删除或重命名
下划线
文件夹,并在替换模块文件夹中创建一个名为下划线的符号链接。我不建议将此作为长期解决方案:再次运行
npm install
可能会撤消此攻击,大多数项目选择避免将
node\u modules
文件夹检查到其源代码存储库中。

尝试使用
mock require
模块