防止要求(...)从父目录中查找模块 [英] Prevent require(...) from looking up modules in the parent directory

查看:15
本文介绍了防止要求(...)从父目录中查找模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

推荐答案

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

这篇关于防止要求(...)从父目录中查找模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆