如果文件已经被另一个文件需要,我是否需要“需要”文件

时间:2013-09-04 06:51:10

标签: node.js

我有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)

为什么会这样?

2 个答案:

答案 0 :(得分:3)

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

  

为什么会这样?

使用时:

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

这将a声明为当前模块的局部变量,它们都在自己的closure内进行评估。这就是模块允许exports允许他们指定“ public ”API的原因。

还可以建议这样,每个模块必须列出其依赖关系,例如c,具体取决于ab

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

但是,您可以使用exports 传递一个模块到另一个模块 - 例如ab

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

console.log(b.a);

而且,从技术上讲,您还可以将a附加到global。虽然,通常你不应该。这样做通常被认为是代码味道。

答案 1 :(得分:0)

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

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


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

必须这样做