主要是关于如果进行cube.js 开发以及参与的(同时也可以方便的学习cube.js 项目结构)
主要说明关于client && driver 的开发
cube.js client
- 流程
1. clone 代码 yarn && yarn lerna bootstrap 安装依赖
2. 使用yarn link 添加包link
3. 进行代码修改
4. yarn build 构建 commonjs 以及umd 模块
5. 使用yarn link @cubejs-client/core 或者yarn link @cubejs-client/react 到自己项目
6. yarn test
- 快速命令
cd packages/cubejs-client-core && yarn && yarn link && cd ../.. && cd packages/cubejs-client-react && yarn && yarn link && cd ../..
cube.js server
- 参考流程
1. clone 代码 yarn && yarn lerna bootstrap 安装依赖
2. yarn tsc:watch 开发ts 的watch 编译
3. packages 目录yarn link 需要的包
4. 进行相关修改
5. yarn link @cubejs-backend/cubejs-<pkg>
6. yarn dev 启动测试(自己的创建的测试项目)
实现driver
- 参考流程
1. copy 相关项目,比如mysql 的driver 实现,命名为@cubejs-backend/<db-name>-driver
2. 不能copy changelog.md
3. 命名驱动类以及readme.md 信息完善
4. 推荐使用纯js 的依赖
5. 典型的实现query 以及testConnection 其他的可以通过BaseDriver 类继承
6. 如果需要连接池,可以实现`generic-pool` 其他语言包可以借鉴
7. 确保驱动实现了`release` 确保资源的释放
8. 使用yarn 进行依赖的管理
9. 添加驱动的实现到packages/cubejs-server-core/src/core/DriverDependencies.js
jdbc 驱动实现
推荐参考cubejs-jdbc-driver/driver/JDBCDriver.js ,因为jdbc 的驱动还是比较规范的
sql 方言实现
- 参考流程
1. 从@cubejs-backend/schema-compiler/adapter 找到可借鉴的参考实现
2. copy && 调整自己的代码
3. 添加`static dialectClass()` 到自己实现的需要返回BaseQuery 的驱动(不是必须的,实现了可以保证正确的sql 处理,否则使用默认的)
比如druid 驱动就实现了
参考
const { BaseDriver } = require('@cubejs-backend/query-orchestrator');
const FooQuery = require('./FooQuery');
class FooDriver extends BaseDriver {
// ...
static dialectClass() {
return FooQuery;
}
}
schema compiler 测试
文档上说的是基于docker 运行测试在packages/cubejs-schema-compiler 运行 npm test(依赖了testcontainers 进行真实db操作)
cubejs-server-core 测试
- 参考流程
1. npx cubejs-cli create 创建项目
2. 安装yarn (全局)
3. link core 包`packages/cubejs-server-core` 包内执行yarn link
4. link 依赖core 的包(driver 以及其他依赖)
5. packages/cubejs-playground 中运行yarn build
6. 安装依赖 yarn
7. link core 到自己的项目`yarn link @cubejs-backend/server-core`
说明
以上是一个参考说明,可以方便学习以及了解cube.js 的开发
参考资料
https://github.com/cube-js/cube.js/blob/master/CONTRIBUTING.md