通过在执行-g
时添加npm install
,可以在本地级别或全局级别安装节点模块。
如果在本地和全局安装了一个模块(例如mocha
),那么当我require( "mocha" );
时会加载哪个模块?
我怎么知道现在在节点的执行环境中加载了哪一个?
答案 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')
来确定当前加载的模块的位置。这样你就可以知道哪一个被加载了。如果它位于您的项目目录下 - 它是本地的 - 否则它是全局的。