适当的es6方式与子模块共享全局

时间:2017-06-01 04:24:31

标签: javascript node.js ecmascript-6 babeljs

我有一个复杂的服务器端节点模块,文件夹形式:

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(即要求将上下文传递给所有相关的调用),但这很难看,IMO。

另一个想法是为每个模块设置一个初始化程序,它可以接受模块范围全局中的上下文和现金,这对于每个文件都是必需的(再次,yuck。)

是否有更清洁,优雅的方式来接近这个?

1 个答案:

答案 0 :(得分: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