阻止require(...)查找父目录中的模块

时间:2015-09-08 10:31:23

标签: node.js node-modules

我的Node项目的根目录位于一个目录中,该目录本身是另一个Node项目的根目录。因此,这两个文件夹都包含package.jsonnode_modules。问题是在内部项目中,有时我的require模块没有安装在这个项目中。但Node只是默默地在父项目的node_modules中找到它们,这会导致令人讨厌的惊喜。我可以以某种方式阻止它这样做吗?我不想改变项目的目录结构,除非它是唯一的解决方案。

1 个答案:

答案 0 :(得分:7)

节点尝试解析当前模块路径名,并将node_modules连接到其每个父目录。 [Source]

您可以在项目模块的顶部覆盖此方法,并添加一些逻辑以从结果路径数组中排除父目录。

//app.js <-- parent project module, should be added at the top

var Module = require('module').Module;
var nodeModulePaths= Module._nodeModulePaths; //backup the original method

Module._nodeModulePaths = function(from) {
    var paths = nodeModulePaths.call(this, from); // call the original method

    //add your logic here to exclude parent dirs, I did a simple match with current dir
    paths = paths.filter(function(path){
        return path.match(__dirname)
    })
    return paths;
};

受到this module

的启发