2017-06-01 67 views
0

我有文件夹形式的复杂的服务器端节点模块:正确ES6方式

store 
    |-index.js 
    |-accounts 
     |-index.js 
     |-consumer.js 
     |-provider.js 
    |-site 
     |-index.js 
     |-portal.js 
    |-etc. 

凡在site/index.js我初始化,应该是所有子访问的数据库上下文 - 模块(accountssite等)和荷兰国际集团export所有子模块接口的,如:

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(即要求的上下文传递INT o所有相关电话),但这是丑陋的,IMO。

另一个想法是有,将接受一个模块范围的全球性,这将需要为每一个文件(再次,呸。)

是否有一个更清洁的环境和现金各模块的初始化器,优雅的es6接近这种方式?

+0

穿过状态该状态比单身更清洁。 – Ryan

+0

相关:https://gist.github.com/branneman/8048520 – nem035

+0

@Ryan只有当合同不清楚。在这种情况下,字面上所有子模块函数都使用状态(db),所以单例是一种更好的方法,但这是高度风格主观的。 ; ^) – Dallas

回答

0

你可以这样做。

定义db/index.js

import dbdriver from 'mydbdriver' 
import settings from './settings' 

const db = dbdriver.connect(settings) 
export db; 

,并在site/index.js

import db from db/index 
export * from '../accounts' // depends on db 
export * from '../site'  // depends on db 


//use db here 

这样,只要你想使用db,需要导入操作上的功能之间的db/index

+0

这可能是我必须做的,虽然略有不同: 将db singleton放入'store/db.js'中,然后只需将所有子模块导入即可。 – Dallas