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

tho*_*rn̈ 10 node.js node-modules

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

has*_*sin 7

节点尝试解析当前模块路径名并连接node_modules到每个父目录.[来源].

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

//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;
};
Run Code Online (Sandbox Code Playgroud)

灵感来自这个模块

  • ES6 导入有类似的东西吗? (3认同)
  • 现在,在2018年第4季度,它仍然是禁用在Node.js中移动文件夹的唯一方法吗?我的TypeScript monorepo中需要它。 (2认同)
  • @Marecky:您至少可以通过向 tsconfig.json 添加以下内容来改变打字稿类型查找的行为:"typeRoots" : ["./node_modules/@types"] (2认同)