- EggApplication启动 【
new EggApplication(...).ready(...)
】 - EggApplication继承EggCore 【
EggApplication extends EggCore
】- EggApplication构建过程 【
EggApplication constructor
】- 执行内置EggLoader按照顺序加载所有中间件、插件等内容 【
this.loader.load()
】
- 执行内置EggLoader按照顺序加载所有中间件、插件等内容 【
- EggApplication构建过程 【
- EggCore继承Koa 【
EggCore extends Koa
】- EggCore构建过程 【
EggCore constructor
】- 加载器初始化 【
this.loader = new EggLoader(...)
】 - 路由初始化 【
this.router = new Router()
】- Router继承KoaRouter中间件 【
Router extends require('koa-router')
】
- Router继承KoaRouter中间件 【
- 路由方法注入
- 加载器初始化 【
- EggCore构建过程 【
- EggLoader
- EggLoader构建过程 【
EggLoader constructor
】 - 注入各种加载器方法
- EggLoader构建过程 【
源码demo传送门 https://github.com/chenshenhai/eggjs-note/tree/master/demo/002-main
.
├── app # Egg.js 应用目录
│ └── router.js
├── index.js # Egg.js 应用启动文件
├── lib # Egg.js 相关模块目录
│ ├── egg # 模拟npm模块egg的最小系统
│ │ ├── index.js
│ │ └── lib
│ │ └── application.js
│ └── egg-core # 模拟npm模块egg-core的最小系统
│ ├── index.js
│ └── lib
│ ├── egg.js # egg-core核心类,继承koa
│ ├── loader
│ │ ├── egg_loader.js # egg-core加载器
│ │ └── mixin # egg-core 各加载器内容
│ │ └── router.js
│ └── utils # egg-core工具目录
│ ├── index.js # egg-core通用工具
│ └── router.js # egg-core内置Router,继承koa-router
└── package.json
const path = require('path');
const EggCore = require('egg-core').EggCore;
const EggLoader = require('egg-core').EggLoader;
class AppWorkerLoader extends EggLoader {
loadAll() {
this.loadPlugin();
this.loadApplicationExtend();
this.loadContextExtend();
this.loadRequestExtend();
this.loadResponseExtend();
this.loadRouter();
// other loader
}
}
class EggApplication extends EggCore {
constructor(options) {
super(options);
this.on('error', err => {
console.error(err);
});
this.loader.loadAll();
}
get [Symbol.for('egg#eggPath')]() {
return __dirname;
}
get [Symbol.for('egg#loader')]() {
return AppWorkerLoader;
}
}
const app = new EggApplication({
baseDir: __dirname, // ./app 目录所在的同级目录
type: 'application',
});
app.ready(err => {
if (err) {
console.log(err);
process.exit(1);
}
const server = require('http').createServer(app.callback());
server.once('error', err => {
console.log('[app_worker] server got error: %s, code: %s', err.message, err.code);
process.exit(1);
});
server.listen(7001, () => {
console.log('server started at 7001');
});
});
从上述代码可以看出 egg-core
的使用流程是
-
egg-core
提供了两个最核心的类EggCore
EggLoader
- 新建
WorkerLoader
继承EggLoader
, 定义所需的加载器 - 新建
EggApplication
继承EggCore
,定义WEB应用的类- 装载
WorkerLoader
- 装载
-
- 配置Egg.js项目目录(
./app
)给app = new EggApplication({...})
- 配置Egg.js项目目录(
-
- 启动应用
可以抽象出以下内容
- 服务启动前
- 加载所有loader
- 加载所有中间件、插件等内容
- 路由注册
- 服务启动