如何知道是调用全局模块还是本地模块?

时间:2016-09-21 15:04:06

标签: javascript node.js mocha node-modules

通过在执行-g时添加npm install,可以在本地级别或全局级别安装节点模块。

如果在本地和全局安装了一个模块(例如mocha),那么当我require( "mocha" );时会加载哪个模块?

我怎么知道现在在节点的执行环境中加载了哪一个?

2 个答案:

答案 0 :(得分:1)

如果所有其他方法都失败了,您可以使用:

$ export NODE_DEBUG=module

然后运行你的命令。这将为您提供所有正在加载的模块及其来源的详细日志。

如果您只想要一个命令,可以运行:

$ NODE_DEBUG=module <command>

唯一警告是,这会显示很多信息。所以grep是你的朋友。

答案 1 :(得分:1)

Node首先会搜索本地模块,如果找不到合适的模块,它将继续在其他地方搜索,如下所示:https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders

您应该能够使用require.resolve('mocha')来确定当前加载的模块的位置。这样你就可以知道哪一个被加载了。如果它位于您的项目目录下 - 它是本地的 - 否则它是全局的。