节点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()
方法,以便有人可以正确初始化你或调用其他模块来获取东西你需要(拉方法)。