我有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)
为什么会这样?
答案 0 :(得分:3)
在大多数情况下,是的。需要引用另一个模块的每个模块都需要独立require()
。
为什么会这样?
使用时:
var a = require('./a');
这将a
声明为当前模块的局部变量,它们都在自己的closure内进行评估。这就是模块允许exports
允许他们指定“ public ”API的原因。
还可以建议这样,每个模块必须列出其依赖关系,例如c
,具体取决于a
和b
。
// 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);
而且,从技术上讲,您还可以将a
附加到global
。虽然,通常你不应该。这样做通常被认为是代码味道。
答案 1 :(得分:0)
是的,你需要将它作为一个人的工作,node.js的类系统与其他服务器端或oop语言不同。
var a = require('./a');
var b = require('./b');
必须这样做