Node js,无需传递依赖项即可拆分文件?
Node js, split up files without having to pass dependencies around?
这可能只是我缺少 'bigger picture' 可以这么说,但我无法理解为什么需要导出模块来分割文件。
我试过这样做:
//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 调用期间传递所需的变量,但我需要传递的不仅仅是 2 个模块。所以从我可能幼稚的角度来看,这似乎有些不必要的麻烦。有人关心启发我,或者实际上有一种我错过的方法可以做到这一点吗?
每个 node.js 模块都是一个独立的可共享单元。它包括完成其工作所需的一切。这就是模块背后的原理。
这个原则使得每个模块开始时的开销要多一点 require()
在该模块中你需要的所有东西,但它只在服务器启动时完成一次并且所有模块无论如何都会被缓存所以它通常不是有意义的性能问题。
你可以通过分配给 global
对象来创建全局的东西,但是它们往往会破坏模块化并且绝对违背独立可共享模块的设计精神。
在您的特定代码中,如果 routes
需要访问 othermodule1
,那么它应该 require()
根据需要访问。这就是模块的工作方式。 routes
应该只包含它需要的东西。模块被缓存,因此多次需要它只是给每个 require()
缓存中的相同模块句柄。
这是对其他系统思维的一种调整,习惯了就去做,没什么大不了的。 require()
在你需要的地方(普通的可共享模块方法)或者在它的构造函数(push 方法)上将一些东西传递给模块,或者创建 init()
方法以便有人可以正确地初始化你或调用其他模块得到你需要的东西(拉法)。
这可能只是我缺少 'bigger picture' 可以这么说,但我无法理解为什么需要导出模块来分割文件。 我试过这样做:
//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 调用期间传递所需的变量,但我需要传递的不仅仅是 2 个模块。所以从我可能幼稚的角度来看,这似乎有些不必要的麻烦。有人关心启发我,或者实际上有一种我错过的方法可以做到这一点吗?
每个 node.js 模块都是一个独立的可共享单元。它包括完成其工作所需的一切。这就是模块背后的原理。
这个原则使得每个模块开始时的开销要多一点 require()
在该模块中你需要的所有东西,但它只在服务器启动时完成一次并且所有模块无论如何都会被缓存所以它通常不是有意义的性能问题。
你可以通过分配给 global
对象来创建全局的东西,但是它们往往会破坏模块化并且绝对违背独立可共享模块的设计精神。
在您的特定代码中,如果 routes
需要访问 othermodule1
,那么它应该 require()
根据需要访问。这就是模块的工作方式。 routes
应该只包含它需要的东西。模块被缓存,因此多次需要它只是给每个 require()
缓存中的相同模块句柄。
这是对其他系统思维的一种调整,习惯了就去做,没什么大不了的。 require()
在你需要的地方(普通的可共享模块方法)或者在它的构造函数(push 方法)上将一些东西传递给模块,或者创建 init()
方法以便有人可以正确地初始化你或调用其他模块得到你需要的东西(拉法)。