javascript - 覆盖 require 从 root 启动并检查 Node 模块而不更改其名称

标签 javascript node.js webpack dependencies require

我正在尝试共享我的客户端和服务器代码,并且我想要一种简洁的方式来要求我的依赖项。

我目前正在使用 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/

相关文章:

css - 使用 webpack 加载字体

javascript - CSS 没有链接到 HTML

javascript - 创建 Id 数组

node.js - node.js - 错误:第一次连接时无法连接到服务器[localhost:27017] [MongoNetworkError:connect ECONNREFUSED 127.0.0.1:27017]

javascript - React,babel,webpack 不解析 jsx 代码

javascript - 世博会如何分发包裹? (.web.js、.js 配置)

javascript - JQuery 背景视频不覆盖整个页面

javascript - AngularJS - 按范围将对象集合绑定(bind)到 HTML 表

node.js - Sequelize : calculate values before creating AND updating

webpack + babel - 转换对象箭头功能不起作用