1

我有 3 个文件

B 需要 A

C 需要(B 和 A)

在这种情况下,C 是否需要 A?怀疑是因为 B 已经需要 A,而当 C 需要 B 时,它也应该需要 A。

所以我只想确定 c 是否需要明确要求 A 。

在同样的情况下,当我明确要求 A 时:

我发现以下错误:

module.js:340
    throw err;
    ^
Error: Cannot find module 'A'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/Users/topi/controller.js:3:13)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)

为什么会这样?

4

2 回答 2

3

在大多数情况下,是的。每个需要引用另一个模块的模块都需要require()独立地引用它。

为什么会这样?

当您使用:

var a = require('./a');

这声明a为当前模块的局部变量,它们都在它们自己的闭包中进行评估。这就是为什么模块必须exports允许它们指定它们的“公共”API。

也可以建议这样,每个模块必须列出其依赖关系,例如c依赖ab

// c.js
var a = require('./a');
var b = require('./b');

但是,您可以使用exports通过另一个模块传递a一个模块 - 例如通过b

// b.js
var a = exports.a = require('./a');
// c.js
var b = require('./b');

console.log(b.a);

而且,从技术上讲,您还可以附加aglobal. 不过,通常您不应该这样做。这样做通常被认为是代码异味。

于 2013-09-04T07:04:03.487 回答
0

是的,你需要它作为一个个体来工作,node.js 的类系统与其他服务器端或 oop 语言不同。

var a = require('./a');


 var b = require('./b');

必须这样做

于 2013-09-04T07:13:37.697 回答