---
url: /zh-CN/basics/structure.md
---
# 目录结构

在[快速入门](../intro/quickstart.md)中，大家对框架应该有了初步的印象，接下来我们简单了解下目录约定规范。

```bash
egg-project
├── package.json
├── app.ts（可选）
├── agent.ts（可选）
├── app
│   ├── controller
│   │   ├── http
│   │   │   ├── HomeController.ts
│   │   │   └── UserController.ts
│   │   ├── rpc
│   │   │   └── UserRPCController.ts
│   │   ├── mcp
│   │   │   └── MyMCPController.ts
│   │   └── schedule
│   │       └── MyTaskController.ts
│   ├── service（可选）
│   │   └── UserService.ts
│   ├── middleware（可选）
│   │   └── ResponseTimeMiddleware.ts
│   ├── public（可选）
│   │   └── reset.css
│   ├── view（可选）
│   │   └── home.tpl
│   └── extend（可选）
│       ├── helper.ts（可选）
│       ├── request.ts（可选）
│       ├── response.ts（可选）
│       ├── context.ts（可选）
│       ├── application.ts（可选）
│       └── agent.ts（可选）
├── config
|   ├── plugin.ts
|   ├── config.default.ts
│   ├── config.prod.ts
|   ├── config.test.ts（可选）
|   ├── config.local.ts（可选）
|   └── config.unittest.ts（可选）
└── test
    ├── middleware
    |   └── ResponseTimeMiddleware.test.ts
    └── controller
           ├── http
           │   └── HomeController.test.ts
           ├── mcp
           │   └── MyMCPController.test.ts
           └── schedule
               └── MyTaskController.test.ts
```

如上，由框架约定的目录：

* `app/controller/**` 用于解析用户的输入，处理后返回相应的结果，具体参见 [Controller](./controller.md)。
* `app/service/**` 用于编写业务逻辑层，建议使用，具体参见 [Service](./service.md)。
* `app/middleware/**` 用于编写中间件，具体参见 [Middleware](./middleware.md)。
* `app/public/**` 用于放置静态资源，具体参见内置插件 [@eggjs/static](https://github.com/eggjs/egg/tree/next/plugins/static)。
* `app/extend/**` 用于框架的扩展，具体参见 [框架扩展](./extend.md)。
* `config/config.{env}.ts` 用于编写配置文件，具体参见 [配置](./config.md)。
* `config/plugin.ts` 用于配置需要加载的插件，具体参见 [插件](./plugin.md)。
* `test/**` 用于单元测试，具体参见 [单元测试](../core/unittest.md)。
* `app.ts` 和 `agent.ts` 用于自定义启动时的初始化工作，具体参见 [启动自定义](./app-start.md)。关于 `agent.ts` 的作用，参见 [Agent 机制](../core/cluster-and-ipc.md#agent-机制)。

由内置插件约定的目录：

* `app/public/**` 用于放置静态资源，具体参见内置插件 [@eggjs/static](https://github.com/eggjs/egg/tree/next/plugins/static)。

**若需自定义自己的目录规范，参见 [加载器（Loader）](../advanced/loader.md)**

* `app/view/**` 用于放置模板文件，具体参见 [模板渲染](../core/view.md)。
* `app/model/**` 用于放置领域模型，如 [`egg-sequelize`](https://github.com/eggjs/egg-sequelize) 等领域类相关插件。
