节点js,分割文件,而不必传递依赖关系?

这可能只是我缺乏一个“更大的图片”可以这么说,但我无法理解为什么需要导出模块来分割文件。 我试着做这样的事情:

//server.js var app = require('koa')(); var othermodule1 = require('othermodule1')(); var othermodule2 = require('othermodule2')(); var router = require('./config/routes')(); app.use(router.routes()); //routes.js module.exports = require('koa-router')() .get('*', function*(next){ othermodule1.something; }) 

意识到routes.js在从serverjs调用它之后无法访问“othermodule1”。 我知道有一种方法可以在require调用期间传递需要的variables,但是我需要的不仅仅是2个模块。 所以从我大概天真的angular度来看,这似乎有些不必要的麻烦。 有人照顾开导我还是有实际的办法做到这一点,我错过了?

每个node.js模块都是一个独立的可共享单元。 它包括了它所需要的所有工作。 这就是模块背后的原理。

这个原则使得在每个模块的开始处require()更多的开销,以便在模块中require()所有东西都require() ,但是在服务器启动时只需要执行一次,所有的模块都被caching起来,所以它通常不是有意义的性能问题。

您可以通过分配global对象来创build全局事物,但是它们往往会打破模块化,并且肯定违背了独立可共享模块的devise精神。


在你的特定代码中,如果routes需要访问othermodule1 ,那么它只require()它在需要的时候。 这就是模块的工作原理。 routes应该只包括它需要的东西。 模块被高速caching,所以需要多次才从caching中提供每个require()相同的模块句柄。


这是对其他系统进行思考的一个调整,但是一旦你习惯了,你就去做,没什么大不了的。 要么你需要什么(普通的可共享的模块方法)或将某些东西传递到模块的构造函数(push方法)或创buildinit()方法,以便有人可以正确初始化你或调用其他模块来获取东西你需要(拉方法)。