快速上手

快速上手

安装 Node 环境

可以访问 Node.js 官网或者使用 nvm 等类似产品,不再赘述。

创建新应用

使用 midway-init 快速上手 - 图1 工具自动创建 midway 应用的目录结构:

$ npm i midway-init -g
$ midway-init

通过生成的 npm scripts 来驱动启动命令:

$ npm install
$ npm run dev

了解目录结构

midway 的目录和 eggjs 目录非常接近,但也有所区别,不同的地方在于:

  • ts 源码存放于 /src 目录下,编译后代码存放于 /dist 下
  • 以往的 app 等都迁移至 /src/app 下,作为 web 层
  • 传统的业务逻辑等,移动到其他目录,比如 /service
➜  midway6-test tree -I node_modules
.
├── README.md
├── README.zh-CN.md
├── dist                                ---- 编译后目录
├── logs                                ---- 本地日志目录
│   └── midway6-test                    ---- 日志应用名开头
│       ├── common-error.log            ---- 错误日志
│       ├── midway-agent.log            ---- agent 输出的日志
│       ├── midway-core.log             ---- 框架输出的日志
│       ├── midway-web.log              ---- koa 输出的日志
│       └── midway6-test-web.log
├── package.json
├── src                                 ---- 源码目录
│   ├── app                             ---- web 层目录
│   │   ├── controller                  ---- web 层 controller 目录
│   │   │   ├── home.ts
│   │   │   └── user.ts
│   │   ├── middleware (可选)            ---- web 层中间件目录
│   │   │   └── trace.ts
│   │   ├── public (可选)                ---- web 层静态文件目录,可以配置
│   │   ├── view (可选)
│   │   |   └── home.tpl                ---- web 层模板
│   ├── config
│   │   ├── config.default.ts
│   │   ├── config.local.ts
│   │   ├── config.prod.ts
│   │   ├── config.unittest.ts
│   │   └── plugin.ts
│   └── service                         ---- 业务逻辑层目录,自由定义
│   │   └── user.ts                     ---- 业务逻辑层,自由定义
│   ├── interface.ts                    ---- 接口定义文件,自由定义
│   ├── app.ts                          ---- 应用扩展文件,可选
│   └── agent.ts                        ---- agent 扩展文件,可选
├── test
│   └── app
│       └── controller
│           └── home.test.ts
├── tsconfig.json
└── tslint.json

如上,由框架约定的目录,Midway 使用 EggJs 作为 Web 层容器,承载请求控制器和传统 MVC 层的工作,这一块由于受到限制,有着一定的目录约定:

  • src/app/router.ts 可选,用于配置 URL 路由规则,具体参见 Router 快速上手 - 图2 。
  • src/app/controller/** 用于解析用户的输入,处理后返回相应的结果,具体参见 Controller。
  • src/app/middleware/** 可选,用于编写中间件,具体参见 Middleware 快速上手 - 图3 。
  • src/app/extend/** 可选,用于框架的扩展,具体参见框架扩展 快速上手 - 图4 。
  • src/config/config.{env}.ts 用于编写配置文件,具体参见配置 快速上手 - 图5 。
  • src/config/plugin.ts 用于配置需要加载的插件,具体参见插件 快速上手 - 图6 。
  • test/** 用于单元测试,具体参见单元测试 快速上手 - 图7 。
  • src/app.ts 和 agent.ts 用于自定义启动时的初始化工作,可选,具体参见启动自定义 快速上手 - 图8 。关于agent.js的作用参见Agent机制 快速上手 - 图9 。

而其他由于 Egg 插件的限制,可能有些目录也会有相应的约定,比如:

  • src/app/public/** 用于放置静态资源,可选,具体参见内置插件 egg-static 快速上手 - 图10 。
  • src/app/view/** 用于放置模板文件,可选,由模板插件约定,具体参见模板渲染 快速上手 - 图11 。

我们会发现常见的代码都会存放于 /src 目录下,由于 ts 的特殊性,在服务器上会通过打包构建为 *.js 文件存放于 /dist 目录。将源文件和编译后文件分开是我们最开始的初衷。

而除了 app 目录以外的其他目录,在 midway 体系下并没有严格的规定,大体可以按照逻辑分层,比如按照传统的 web, biz, service, manager, dao 等进行分层进行创建目录就非常不错。

TIP

由于 Midway 采用了自动扫描装配,依赖注入等特性,无需在特定的目录下受到限制,使得在全栈应用开发的时候,保持了不错的开发体验。