命名约定

为了不断沉淀业务模块,达到高度可复用的效果,所有模块的命名空间必须充分隔离,避免相互污染与冲突,故采用如下命名规范:

  1. 1egg-born-module-{providerId}-{moduleName}
  • providerId: 提供者Id,强烈建议采用Github的Username,从而确保贡献到社区的模块不会冲突
  • moduleName: 模块名称

基于此命名规范,在项目的前后端引用模块相关资源,使用规则如下:

以模块egg-born-module-test-party为例

  • providerId: test
  • moduleName: party
  • fullName: egg-born-module-test-party
  • relativeName: test-party
  • 前端页面路由路径: /test/party/{page}
  • 后端API路由路径: /test/party/{controller}/{action}

模块命名空间隔离

为了适应大型业务开发的场景,避免模块之间的变量污染与冲突,框架对前端和后端均实现了模块命名空间隔离机制,包括模块的前端组件、前端配置、后端逻辑、后端路由、后端配置等等诸元素(请参见后续模块开发的若干章节)

模块分类

EggBornJS中模块有三类:全局模块本地模块Vendor模块

  1. 全局模块:位于目录node_modules
  2. 局部模块:位于目录src/module
  3. Vendor模块:位于目录src/module-vendor

新建模块

可以使用Cli命令创建模块文件骨架

  1. 1# 进入项目所在目录
  2. 2$ cd /path/to/project
  3. 3$ npm run cli :create:module demo-student

安装Vendor模块

一般而言,Vendor模块来自Cabloy商店。比如Cabloy商店有a-flow模块(包含Node工作流引擎源码),如果要安装此模块,只需如下命令:

  1. 1$ npm run cli :store:sync a-flow

加载机制-后端加载

EggBornJS在EggJS的基础上实现了自定义的加载器,在系统启动时,一次性同步加载所有模块

加载机制-前端加载

EggBornJS中模块前端代码有两种加载机制:异步加载同步加载

为了支持大型Web业务系统开发,模块默认都是异步加载

如果要实现同步加载,只需在模块目录名称后面加上后缀-sync,如模块egg-born-module-a-components-sync,此模块提供了基础的前端UI组件,所以同步加载,便于其他模块引用

  • 也就是说,决定一个模块是异步加载同步加载的是模块目录名称,实际的前端页面路由不做任何特殊处理

模块依赖

通过模块的package.json文件管理模块依赖关系

比如,模块aa-module1依赖aa-module2,需要在模块aa-module1package.json文件中作如下配置

  1. 1{
  2. 2 "name": "egg-born-module-aa-module1",
  3. 3 "version": "0.0.1",
  4. 4 "eggBornModule": {
  5. 5 "dependencies": {
  6. 6 "aa-module2": "0.0.1"
  7. 7 }
  8. 8 }
  9. 9}
名称 说明
“aa-module2”: “0.0.1” 通过此声明,可以确保依赖模块之间的加载顺序