你好,我是沐爸,欢迎点赞、收藏、评论和关注。
一、Egg.js 是什么?
Egg.js 为企业级框架和应用而生。我们希望 Egg.js 能孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。
设计原则
Egg 奉行“约定优于配置”。
Egg vs Express vs Koa
1.三者的关系
- Koa 由 Express 原班人马打造,Egg 继承于 Koa。
- 三者都采用 MVC 模型。
2.Koa vs Express
- Koa 的中间件与 Express 不同,Koa 选择了洋葱圈模式(每个请求在经过一个中间件时都会执行两次)。
- Express 只有 Request 和 Response 两个对象,Koa 增加了 Context 对象作为该次请求的上下文对象。
3.Egg vs Express vs Koa
- Koa 和 Express 框架本身都缺少约定,都会导致千奇百怪的写法,降低了代码的可读性和可维护性。
- Egg 按照一套统一的约定开发应用,可以减少沟通协作成本。
特性
- 可定制上层框架的能力
- 高度可扩展的插件机制
- 内置多进程管理
- 基于 Koa 开发,性能优异
- 框架稳定,测试覆盖率高
- 渐进式开发
Egg.js 在阿里的地位
阿里旗下的蚂蚁金服、天猫、UC、村淘、神马等产品都是在 Egg.js 基础上扩展的。
Egg.js 的历史
- 2013年蚂蚁的 chair 框架,可以视为 egg 的前身。
- 2015年11月,在苏千的召集下,阿里各部的前端骨干齐聚黄龙,闭门共建。
- 2016年初,各部的基础 web 框架完成升级,在同一套规范的基础上进行差异化定制。
- 2016年中,广泛使用在绝大部分阿里的前端 Node.js 应用。
- 2016年9月,在 JSConf China 2016 上亮相并宣布开源。
- 2017年初,官网文档亮相,并将在本月发布 egg@1.0版本。
- 2017年12月左右 Egg 社区版 2.0 正式发布,性能提升 30%,基于 Koa2 拥抱 Async
- ......
- 2020年腾讯云在自己的 serverless framework 中集成了 egg.js。
- 2024年7月最新 egg 的版本是 3.27.1
二、快速入门
环境准备
- 操作系统:支持 Windows、macOS、Linux
- 运行环境:建议选择 LTS 版本, 最低要求 8.x
快速初始化
推荐直接使用脚手架。只需几条简单指令,即可快速生成项目(npm >= 6.1.0
):
mkdir egg-example && cd egg-example
npm init egg --type=simple
npm i
npm run dev
# http://127.0.0.1:7001
注:请确保你使用的 npm 版本不低于 6.1.0。
逐步搭建
除了使用上面的快速初始化,还可以通过手动逐步搭建的方式创建项目,这有助于更好地了解 Egg。对于逐步搭建,官网讲的比较详细。注意:实际项目开发中,推荐使用脚手架直接初始化。
三、目录结构
以下是由框架约定的目录结构:
egg-project
├── package.json
├── app.js(可选) # 用于自定义启动时的初始化工作
├── agent.js(可选) # 用于自定义启动时的初始化工作
├── app
| ├── router.js # URL 路由规则
│ ├── controller # 控制器
│ │ └── home.js
│ ├── service(可选) # 服务(业务逻辑)
│ │ └── user.js
│ ├── model(可选) # 数据库模型
│ │ └── user.js
│ ├── middleware(可选) # 中间件
│ │ └── response_time.js
│ ├── schedule(可选) # 定时任务
│ │ └── my_task.js
│ ├── public(可选) # 静态资源
│ │ └── reset.css
│ ├── view(可选) # 模板
│ │ └── home.tpl
│ └── extend(可选) # 框架的扩展
│ ├── helper.js(可选)
│ ├── request.js(可选)
│ ├── response.js(可选)
│ ├── context.js(可选)
│ ├── application.js(可选)
│ └── agent.js(可选)
├── config # 配置
| ├── plugin.js # 配置需要加载的插件
| ├── config.default.js # 默认配置,所有环境都会加载
│ ├── config.prod.js # 生产环境
| ├── config.test.js(可选) # 单元测试
| ├── config.local.js(可选) # 本地开发环境
| └── config.unittest.js(可选) # 单元测试
└── test # 单元测试
├── middleware
| └── response_time.test.js
└── controller
└── home.test.js
好了,分享结束,谢谢点赞,下期再见。