文件夹结构
在本指南中,我们将浏览 AdonisJS 在安装过程中创建的重要文件和文件夹。
我们提供了一个经过深思熟虑的默认文件夹结构,帮助你保持项目整洁且易于重构。然而,你完全可以根据自己的团队和项目需求进行调整。
adonisrc.ts
文件
adonisrc.ts
文件用于配置工作区和应用程序的一些运行时设置。
在此文件中,你可以注册提供者、定义命令别名或指定要复制到生产构建中的文件。
另请参阅:AdonisRC 文件参考指南
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
目录中。例如,这些可能是用户上传的文件(在开发过程中生成)或写入磁盘的日志。
.gitignore
规则必须忽略 tmp
目录,你也不应将其复制到生产服务器。
tests
目录
tests
目录组织应用程序的测试。此外,还为 unit
和 functional
测试创建了子目录。
另请参阅:测试
├── tests
│ ├── bootstrap.ts
│ └── functional
│ └── regression
│ └── unit