【发布时间】: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 中没有继承模块。