我正在尝试共享我的客户端和服务器代码,并且我想要一种简洁的方式来要求我的依赖项。
我目前正在使用 webpack 作为我的构建工具,并且我已将其设置为解析到我的 asset/js 文件夹,因此我对客户端的依赖项如下所示:
require('validators/login.js');
我想在服务器上共享完全相同的代码,但我不想放入 if 语句来检查是服务器还是客户端在执行请求,这样我就可以执行类似的操作
if server
rootRequire..
else
require
我希望服务器像客户端一样使用 require 并从根目录开始,但我也不想在它不返回结果的情况下剥夺它搜索 node_modules 文件夹的功能。
我也希望在不将所有代码放入 node_modules 文件夹中的情况下完成此操作。
有人对如何正确重写 require 有一些好的建议吗?我已经阅读了大多数 hacky 解决方案,例如使用符号链接(symbolic link)或将内容放入 node_modules 中,我不是在寻找这些答案,我想要一些干净的并且实际上正确覆盖 require 的东西。
最佳答案
我想我已经提出了一个令我相当满意的解决方案,我想我会与其他需要答案的人分享它。
var module = require('module');
var baseRequire = module.prototype.require;
module.prototype.require = function()
{
// Add any extra paths here...
var extraPaths = [
__dirname
];
for (var i = 0, len = extraPaths.length; i < len; i++) {
if (this.paths.indexOf(extraPaths[i]) == -1) {
this.paths.push(extraPaths[i])
}
}
return baseRequire.apply(this, arguments);
};
关于javascript - 覆盖 require 从 root 启动并检查 Node 模块而不更改其名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45335628/