cube.js 执行环境
cube.js 使用node vm 进行schema 的编译,提供了灵活的编译schema 的能力
cube.js 提供的全局对象
cube()
, context()
asyncModule()
import && export 的处理
数据schema 定义的es6 文件,将会被编译为nodejs 的调用,import 变为Require
export 会被定义为exports ,当然核心依赖的还是babel
asyncModule
一个方便的动态schema 编译处理扩展
上下文符号编译
cube 对于部分保留的schema 定义进行了自己的编译处理(注意是在cube 函数内部定义的)
内部需要处理的
sql
measureReferences
dimensionReferences
segmentReferences
timeDimensionReference
drillMembers
drillMemberReferences
contextMembers
以上的定义会被编译为函数,同时保留传递的参数,参考
cube(`Users`, {
// ...
measures: {
count: {
type: `count`,
},
ratio: {
sql: `sum(${CUBE}.amount) / ${count}`,
type: `number`,
},
},
});
编译为
cube(`Users`, {
// ...
measures: {
count: {
type: `count`,
},
ratio: {
sql: (CUBE, count) => `sum(${CUBE}.amount) / ${count}`,
type: `number`,
},
},
});
所以如果需要自己传递一些定义(cube 函数外部),就需要使用函数模式
参考
const measureRatioDefinition = {
sql: (CUBE, count) => `sum(${CUBE}.amount) / ${count}`,
type: `number`,
};
cube(`Users`, {
// ...
measures: {
count: {
type: `count`,
},
ratio: measureRatioDefinition,
},
});
说明
说明
以上部分对于cube.js 内部的理解还是很有用的,以前官方文档并没有太多的介绍,目前来说文档还是比较全了