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

How to know if global module is invoked or local?

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

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

我怎么知道现在在node的执行环境中加载的是哪一个?

如果一切都失败了,你可以使用:

$ export NODE_DEBUG=module

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

如果你只需要一个命令,你可以运行:

$ NODE_DEBUG=module <command>

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

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

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