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

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

为什么这样呢?

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

为什么这样呢?

当你使用:

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

这将声明为当前模块的局部variables,这些variables都在自己的闭包中进行评估。 这就是为什么模块有exports允许他们指定他们的“ 公共 ”API。

也可以这样build议,即每个模块都必须列出它的依赖关系,比如依赖于ab

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

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

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

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

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

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

必须这样做