【问题标题】:How to let parent module to import a child module of the child module in NodeJSNodeJS中如何让父模块导入子模块的子模块
【发布时间】:2016-10-31 09:40:02
【问题描述】:
Module A
│
└─ Module B (devDependency in Module A's package.json)
   │
   └─ Module C (dependency in Module B's package.json)

模块 B 是我正在开发的。但我知道模块 C 将在模块 A 中以require('Module C') 调用。我遇到的错误是Cannot find module 'Module C'

我目前的解决方案是丑陋的:

在模块 B 的 index.js 中

exports.Module_C = require('Module_C) || require(path.resolve(__dirname, 'node_modules/Module_C/index');

在模块 A 中

require('Module_B').Module_C

我希望有更好的方法来做到这一点。

【问题讨论】:

  • 如果模块 A 对模块 C 有一个 require,那么它必须是模块 A 的直接依赖项,NPM 将使其直接对模块 A 可用。最新的 NPM 将依赖模块保持在更扁平的层次结构中,以便 A 和 B 都可以使用相同的模块 C(尽管它应该分别列为两者的依赖模块)。
  • 如果您不打算让模块 C 成为模块 A 的依赖项,那么您必须通过 B 代理它的接口,以便 A 可以从 B 获取它,如 require('Module_B').Module_C 中一样。这是你最好的两个选择。要么让它成为一个依赖,所以 NPM 将使它可用或代理它。您可以进入模块 B 的文件层次结构以从模块 A 访问模块 C,但这不是推荐的做事方式。
  • 我知道会这样做。但问题是有 Module_D、Module_E,就像 Module_C 一样,我不希望正在编写 Module_A 的人,即 Module_B 的用户,来 npm install Module_C/D/E。我希望那个用户可以 npm install Module_B,然后就是这样。
  • 正如 Norguard 所说,node.js 中没有继承模块。

标签: node.js module require


【解决方案1】:

模块不被继承。

如果您在系统的两个不同位置需要相同的模块,只需在两个不同的位置使用它即可。

// A.js
var C = require("./modules/c");
var B = require("./modules/b");


// B.js
var C = require("./modules/c");
module.exports = { };

// C.js
module.exports = { };

如果您需要导入模块的子部分,请导航到您需要的文件(或文件的根目录)。

// app.js
var add = require("./lib/helpers/math/add");

如果您尝试在一个模块中提供多个模块的功能,那么您正在寻找的是一种服务,您将为该服务创建一个 API,以抽象您希望最终用户能够实现的功能做,从你需要触摸的所有地方去做。

即使该服务/库基本上只是将其他接口扩展到它自己的接口。

【讨论】:

    猜你喜欢
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    相关资源
    最近更新 更多