命名约定
为了不断沉淀业务模块,达到高度可复用的效果,所有模块的命名空间必须充分隔离,避免相互污染与冲突,故采用如下命名规范:
- 1egg-born-module-{providerId}-{moduleName}
providerId
: 提供者Id,强烈建议采用Github的Username,从而确保贡献到社区的模块不会冲突moduleName
: 模块名称
基于此命名规范,在项目的前后端引用模块相关资源,使用规则如下:
以模块egg-born-module-test-party
为例
providerId
: testmoduleName
: partyfullName
: egg-born-module-test-partyrelativeName
: test-party- 前端页面路由路径: /test/party/{page}
- 后端API路由路径: /test/party/{controller}/{action}
模块命名空间隔离
为了适应大型业务开发的场景,避免模块之间的变量污染与冲突,框架对前端和后端均实现了模块命名空间隔离
机制,包括模块的前端组件、前端配置、后端逻辑、后端路由、后端配置等等诸元素(请参见后续模块开发
的若干章节)
模块分类
EggBornJS中模块有三类:全局模块
、本地模块
、Vendor模块
- 全局模块:位于目录
node_modules
- 局部模块:位于目录
src/module
- Vendor模块:位于目录
src/module-vendor
新建模块
可以使用Cli命令创建模块文件骨架
- 1# 进入项目所在目录
- 2$ cd /path/to/project
- 3$ npm run cli :create:module demo-student
安装Vendor模块
一般而言,Vendor模块来自Cabloy商店。比如Cabloy商店有a-flow
模块(包含Node工作流引擎源码),如果要安装此模块,只需如下命令:
- 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-module1
的package.json
文件中作如下配置
- 1{
- 2 "name": "egg-born-module-aa-module1",
- 3 "version": "0.0.1",
- 4 "eggBornModule": {
- 5 "dependencies": {
- 6 "aa-module2": "0.0.1"
- 7 }
- 8 }
- 9}
名称 | 说明 |
---|---|
“aa-module2”: “0.0.1” | 通过此声明,可以确保依赖模块之间的加载顺序 |
评论: