【问题标题】:Nodejs require module from external folderNodejs 需要来自外部文件夹的模块
【发布时间】:2019-09-27 18:39:17
【问题描述】:

我正在 nodejs 上开发微服务架构。 我将“核心”功能移动到单独的 git 存储库,每个“服务”都将该核心添加为 npm 依赖项。

在服务中我使用核心作为

require('core/module1');

在这种情况下,nodejs 从 node_modules 获取“核心”,它可以用于生产,但对于开发,我想从外部文件夹而不是从 node_modules 获取“核心”。

我的主要想法 - 在“核心”中进行更改并立即在“服务”中获得结果。

我不能使用 NODE_PATH 来指定外部“核心”文件夹,因为我现在已经使用过了。

我找到了使用“app-module-path”模块向 Node.js 模块搜索路径添加其他目录的解决方案。

if(isDevelopment()){
    require('app-module-path').addPath('path_to_core_folder');
}

这是可行的解决方案,但也许您可以提出一些更清晰的方法?

我的文件夹结构

- core
    module1

- service1
    -index.js
    -node_modules
      -core

谢谢。

【问题讨论】:

    标签: node.js


    【解决方案1】:

    任何一个都有效。如果你 require('modulename') 并且它存在于你的 node_modules 文件夹中,它将从那里加载。如果您希望它从另一个文件夹或您的主文件夹加载,您需要执行 require('./modulename") 它将在当前文件夹中查找它。或者您可以执行 require('./my_modules/modulename' ) 这将适用于子文件夹。

    【讨论】:

    • Node 不会在您的主文件夹中查找模块。为此,您需要明确告诉节点在您的主文件夹中查找模块。为此,您使用require('./mymodule') 而不是require('mymodule')。第二个版本总是在node_modules 中寻找模块。你的第二个例子也是如此。必须是 require('./my_modules/modulename')
    • @Neekoy 我明白了。但就我而言,为了开发,我希望 nodejs 从主“服务”文件夹中不存在的文件夹中解析核心。
    • Slebetman 实际上是正确的,它需要我在答案中错过的点。我编辑了对正确信息的回复。
    • 如果我在父目录中有一个不是 NPM 包的配置文件,只是一个依赖于要包含的环境变量的 JSON 调用怎么办?我正在尝试 require('../config/config') 并且 config 是一个开关,它需要一个 JSON 文件,具体取决于 NODE_ENV 变量。我收到一个错误:验证包错误:找不到模块'../config/config'
    【解决方案2】:

    我会查看 mockrequire 模块,它允许您重定向加载模块的目录

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 2013-06-08
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 2016-02-26
      • 2019-01-15
      • 1970-01-01
      相关资源
      最近更新 更多