目录结构
在本指南中,我们将一探 AdonisJS 在安装过程中创建的重要文件与目录。
我们提供了一套经过深思熟虑的默认目录结构,帮助你保持项目整洁且易于重构。不过,你完全有自由偏离它,采用对团队和项目更合适的目录结构。
adonisrc.ts 文件
adonisrc.ts 文件用于配置工作区以及应用的一些运行时设置。
在该文件中,你可以注册服务提供者、定义命令别名,或指定要复制到生产构建中的文件。
tsconfig.json 文件
tsconfig.json 文件存储了应用的 TypeScript 配置。欢迎根据项目或团队的需求对此文件进行更改。
AdonisJS 内部正常工作需要以下配置选项。
{
"compilerOptions": {
"module": "NodeNext",
"isolatedModules": true,
"declaration": false,
"outDir": "./build",
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"skipLibCheck": true
}
}
子路径导入
AdonisJS 使用 Node.js 的子路径导入功能来定义导入别名。
以下导入别名已在 package.json 文件中预配置。欢迎添加新的别名或编辑已有的别名。
{
"imports": {
"#controllers/*": "./app/controllers/*.js",
"#exceptions/*": "./app/exceptions/*.js",
"#models/*": "./app/models/*.js",
"#mails/*": "./app/mails/*.js",
"#services/*": "./app/services/*.js",
"#listeners/*": "./app/listeners/*.js",
"#events/*": "./app/events/*.js",
"#middleware/*": "./app/middleware/*.js",
"#validators/*": "./app/validators/*.js",
"#providers/*": "./app/providers/*.js",
"#policies/*": "./app/policies/*.js",
"#abilities/*": "./app/abilities/*.js",
"#database/*": "./database/*.js",
"#tests/*": "./tests/*.js",
"#start/*": "./start/*.js",
"#config/*": "./config/*.js"
}
}
bin 目录
bin 目录包含用于在特定环境中加载应用的入口文件。例如:
bin/server.ts文件在 web 环境中启动应用以监听 HTTP 请求。bin/console.ts文件启动 Ace 命令行并执行命令。bin/test.ts文件启动应用以运行测试。
ace.js 文件
ace 文件启动附属于你的应用的命令行框架。因此,每次你运行 ace 命令时,都会经过该文件。
如果你注意到,ace 文件以 .js 扩展名结尾。这是因为我们希望在不编译的情况下使用 node 二进制直接运行该文件。
app 目录
app 目录组织应用领域逻辑的代码。例如,控制器、模型、服务等全都位于 app 目录中。
欢迎创建额外的目录来更好地组织你的应用代码。
├── app
│ └── controllers
│ └── exceptions
│ └── middleware
│ └── models
│ └── validators
resources 目录
resources 目录包含 Edge 模板,以及前端代码的源文件。换言之,应用表示层的代码位于 resources 目录中。
├── resources
│ └── views
│ └── js
│ └── css
│ └── fonts
│ └── images
start 目录
start 目录包含在应用启动生命周期中你想要导入的文件。例如,用于注册路由和定义事件监听器的文件应当位于 start 目录中。
├── start
│ ├── env.ts
│ ├── kernel.ts
│ ├── routes.ts
│ ├── validator.ts
│ ├── events.ts
AdonisJS 不会自动导入 start 目录中的文件。它仅仅是一个用于归类相似文件的约定。
我们建议你阅读关于预加载文件和应用启动生命周期的内容,以更好地理解哪些文件应当放在 start 目录下。
public 目录
public 目录托管 CSS 文件、图片、字体或前端 JavaScript 等静态资源。
不要将 public 目录与 resources 目录混淆。resources 目录包含前端应用的源代码,而 public 目录包含编译后的输出。
使用 Vite 时,你应将前端资源存储在 resources/<SUB_DIR> 目录中,并让 Vite 编译器在 public 目录中创建输出。
另一方面,如果你不使用 Vite,可以直接在 public 目录中创建文件,并通过文件名访问它们。例如,你可以通过 http://localhost:3333/style.css 这个 URL 访问 ./public/style.css 文件。
database 目录
database 目录包含数据库迁移和种子文件。
├── database
│ └── migrations
│ └── seeders
commands 目录
ace 命令存储在 commands 目录中。你可以通过运行 node ace make:command 在该文件夹中创建命令。
config 目录
config 目录包含应用的运行时配置文件。
框架核心和其他已安装的软件包会从该目录读取配置文件。你也可以将应用本地的配置存储在该目录中。
了解更多关于配置管理的内容。
├── config
│ ├── app.ts
│ ├── bodyparser.ts
│ ├── cors.ts
│ ├── database.ts
│ ├── drive.ts
│ ├── hash.ts
│ ├── logger.ts
│ ├── session.ts
│ ├── static.ts
types 目录
types 目录是应用中使用的 TypeScript 接口或类型的归宿。
该目录默认为空,不过,你可以在 types 目录中创建文件和文件夹来定义自定义类型和接口。
├── types
│ ├── events.ts
│ ├── container.ts
providers 目录
providers 目录用于存储应用使用的服务提供者。你可以使用 node ace make:provider 命令创建新的服务提供者。
了解更多关于服务提供者的内容
├── providers
│ └── app_provider.ts
│ └── http_server_provider.ts
tmp 目录
应用生成的临时文件存储在 tmp 目录中。例如,这些可能是用户上传的文件(在开发期间生成)或写入磁盘的日志。
tmp 目录必须被 .gitignore 规则忽略,你也不应将其复制到生产服务器。
tests 目录
tests 目录组织你的应用测试。其中会为 unit 和 functional 测试创建子目录。
另见:测试
├── tests
│ ├── bootstrap.ts
│ └── functional
│ └── regression
│ └── unit