javascript - 在 node.js 中用一个模块替换另一个模块

标签 javascript node.js module require

如果我有一个 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/

相关文章:

javascript - extJs livesearchpanel 用于 extJs 门户内的数据网格

node.js - Jade/pug 中的评论

node.js - 在 WebStorm 中设置 Node.js 环境变量

node.js - 从同一文件 node.js 访问另一个 module.exports 函数

javascript - 模块中的返回值返回空?

javascript - 函数变量的初始值没有改变,不知道为什么

javascript - 在 React 中使用 onClick 事件处理程序

node.js - NixOS 安装特定的 NodeJS 版本

python - Python 2.7 中的 boost 模块?

javascript - 比较 2 个对象并更新 JavaScript 中的匹配对象