Egg.js 系列(1):Egg是什么、快速入门、目录结构

Source

你好,我是沐爸,欢迎点赞、收藏、评论和关注。

一、Egg.js 是什么?

Egg.js 为企业级框架和应用而生。我们希望 Egg.js 能孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。

官网地址:egg - 为企业级框架和应用而生 - Egg

设计原则

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

 好了,分享结束,谢谢点赞,下期再见。