如果我有一个 node.js 应用程序,它有数百个引用模块(比如下划线)的文件,并且我想用另一个模块(比如 lodash)替换那个模块,那么进行这种替换的明显方法是全局名称替换并切换 package.json 文件中的模块。
有没有办法只更改名称所指的模块,以便当 node.js 看到 require('moduleA') 时它实际上加载了'moduleB'?现在我知道这会导致命名 hell ,因为从事该项目的任何人都会看到 require('moduleA') 并且不知道正在加载的真正模块是'moduleB'所以最终你可能想要第一个解决方案。我正在考虑的用例是,如果您想尝试 API 兼容模块的一些替代方案来衡量您的应用程序的性能(例如)每个模块。
最佳答案
如果这是一件持续的事情,并且您想保持以编程方式经常在选项之间切换的能力,例如在测试中:
而不是使用 require("underscore");
在你的代码库中,需要一个本地文件而不是像 require("./lib/underscore");
,并让该文件有条件地重新导出下划线或不同的库:
if (global.USE_LODASH) {
module.exports = require("lodash");
} else {
module.exports = require("underscore");
}
如果在决定切换之前尝试替代库是一次性的事情,并且您想先快速进行此测试而不在所有文件中查找和替换:强>
进入你的node_modules
文件夹,删除或重命名 underscore
文件夹,并创建一个名为 underscore 的符号链接(symbolic link)到替换模块的文件夹。我不建议将此作为长期解决方案:运行 npm install
again 可能会撤消此 hack,并且大多数项目选择避免检查 node_modules
文件夹到他们的源存储库中。
关于javascript - 在 node.js 中用一个模块替换另一个模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26068346/