【发布时间】:2017-06-01 04:24:31
【问题描述】:
我有一个文件夹形式的复杂服务器端节点模块:
store
|-index.js
|-accounts
|-index.js
|-consumer.js
|-provider.js
|-site
|-index.js
|-portal.js
|-etc.
在site/index.js 中,我正在初始化所有子模块(accounts、site 等)和exporting 所有子模块接口都应该可以访问的数据库上下文,例如:
import dbdriver from 'mydbdriver'
import settings from './settings'
const db = dbdriver.connect(settings)
export * from '../accounts' // depends on db
export * from '../site' // depends on db
我考虑过通过参数污染子模块 API(即要求将上下文传递给所有相关调用),但这很难看,IMO。
另一个想法是为每个模块设置一个初始化程序,该初始化程序将在模块范围的全局变量中接受上下文和现金,这对于每个单个文件都是必需的(再次,哎呀。)
有没有一种更干净、更优雅的 es6 方法来解决这个问题?
【问题讨论】:
-
在该状态下运行的函数之间传递状态比使用单例要干净得多。
-
@Ryan 仅在合同不明确时。在这种情况下,实际上所有子模块函数都使用状态(db),因此单例是更好的方法,但这在风格上是非常主观的。 ;^)
-
这对我想做的事情来说太过分了。我认为@riyaj-khan 的方法是正确的。
-
@Dallas:这种情况也不例外,它可能会在某个时候咬人。也许在尝试编写测试时;可能是因为其他原因尝试导入模块而没有任何副作用。
标签: javascript node.js ecmascript-6 babeljs