防止 require(...) 在父目录中查找模块

Prevent require(...) from looking up modules in the parent directory

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

Node 尝试解析当前模块路径名并将 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