【问题标题】:How to know if global module is invoked or local?如何知道是调用全局模块还是本地模块?
【发布时间】:2016-09-21 23:38:59
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为应用程序在项目运行时首先在本地搜索,如果找到,将使用它。我之所以这样认为是因为 package.json,因为允许在依赖项和库中放置一些配置。
  • 我认为您不能在代码中检查,而是在 package.json 文件中检查。

标签: javascript node.js mocha.js node-modules


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    $ export NODE_DEBUG=module
    

    然后运行你的命令。这将为您提供正在加载的所有模块以及它们来自何处的详细日志。

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

    $ NODE_DEBUG=module <command>
    

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

    【讨论】:

    • 谢谢,帮了大忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 2014-09-16
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2019-11-19
    相关资源
    最近更新 更多