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