Core · 开发应用

项目结构

目录概览

创建应用得到的是一个可以直接修改的源码项目。以下以默认应用模板为例,列出开发时常用的位置;配置文件、依赖和构建产物会在对应步骤完成后生成。

目录结构
my-app/
├── client/              # Pages, components and client logic
├── server/              # APIs and business services
├── database/            # Migrations and seeds, grouped by connection
├── cli/                 # Application commands and CLI plugins
├── tests/               # Tests and test helpers
├── public/              # Static assets
├── packages/            # Local workspace packages (optional)
├── .agents/
│   ├── rules/           # Project-owned Agent rules
│   └── skills/          # Synchronized dependency Skills (generated)
├── AGENTS.md            # Agent guidance entry
├── config.example.yml   # Configuration example
├── config.yml           # Local configuration (generated during setup)
├── package.json         # Scripts and dependencies
├── pnpm-lock.yaml       # Resolved dependency versions
├── pnpm-workspace.yaml  # Workspace settings
├── node_modules/        # Installed dependencies (generated)
├── dist/                # Build output (generated)
└── storage/             # Runtime data

目录会随模板版本和业务功能变化。packages/ 等可选目录按需创建,不必为了匹配目录树而补齐。

页面、接口和数据写在哪里

要做的改动主要位置如何接入应用
新增页面或菜单client/pages/在 client/routes.ts 注册页面路由和导航
复用界面组件或交互逻辑client/components/、client/hooks/由页面或其他组件导入
调整布局、主题或界面文案client/layouts/、client/theme/、client/locales/在对应布局、主题或语言资源中修改
添加图片等静态资源public/在页面或样式中引用资源地址
新增 HTTP 接口server/routes/在 server/routes/index.ts 注册
提取业务服务按需创建 server/services/由接口调用;需要统一注册和管理生命周期时使用 server/providers/
创建或调整数据表database/main/migrations/添加迁移,由应用执行数据库变更
准备初始数据database/main/seeds/添加初始化数据逻辑
新增应用命令按需创建 cli/commands/按应用 CLI 的命令目录约定组织

页面和接口需要接入相应的注册入口,单独新增文件不会自动成为可访问的页面或 API。安装到 client/extensions/ 的 UI 源码也属于应用源码,通过导入接入页面或组件。

database/ 按连接名组织,main 是默认连接。已经执行过的迁移应保留,后续结构变化写成新迁移。具体写法见建表与数据初始化。

例如添加客户管理,通常会涉及客户表迁移、客户接口、客户页面及其注册文件。可以跟随开发第一个功能,对照一个实际功能理解这些位置。

配置、依赖和插件

配置文件

位置用途
config.example.yml可提交的配置示例,不包含真实凭据
config.yml当前环境的数据库连接、密钥等配置,不提交到 Git
server/config/在代码中定义配置默认值、校验规则和环境变量映射

修改当前环境的连接信息时,查看 config.yml;为业务增加新的配置项时,再修改 server/config/ 中的定义。配置加载方式和命令见应用配置。

依赖与插件注册

package.json 保存运行、测试和构建脚本,以及依赖清单。pnpm-lock.yaml 记录解析后的依赖版本,需要随源码提交。

模板通过插件提供用户、认证、权限、文件等能力。查看 package.json 可以知道安装了哪些包,但实际接入了哪些能力,还要看各端的注册文件:

文件注册内容
client/plugins.ts客户端插件
server/plugins.ts服务端插件
cli/plugins.ts命令行插件

一个插件不一定同时提供三个入口,有些包只提供开发 Skills。安装依赖、注册插件以及接入页面分别处理,操作步骤见管理插件,各插件的用途见插件索引。

需要维护本地插件或共享包时,放在 packages/,并在 pnpm-workspace.yaml 中配置工作区包目录。需要独立分发 UI 源码资产时,也可以在这里维护 UI Registry 包;详细结构见项目目录与文件约定。

测试放在哪里

测试集中在 tests/,按被测代码的职责组织:

目录内容
tests/client/页面、组件和客户端逻辑
tests/server/接口、服务和权限
tests/database/迁移、初始数据和数据库行为
tests/cli/应用命令,按需创建
tests/project/项目配置和构建
tests/fixtures/、tests/helpers/、tests/setup/测试数据、共享辅助函数和环境初始化
tests/playwright/浏览器操作测试,按需创建

在应用根目录运行 pnpm test 执行 Vitest 测试。浏览器测试使用 pnpm test:e2e,需要按测试配置准备运行中的应用和登录信息。具体准备步骤见测试。

已有项目的目录可能不同,以 vitest.config.ts 和 playwright.config.ts 中的配置为准。检查报告中的实际用例数;没有找到用例时正常退出,不代表功能已经通过验证。

Agent 读取哪些指引

AGENTS.md 是应用开发指引的入口。使用 Agent 开发时,区分项目自己维护的约定和依赖包提供的 Skills:

位置维护方式
AGENTS.md、.agents/rules/保存本项目的开发约定,随源码维护和提交
.agents/skills/从依赖包同步生成,不直接修改或提交这些副本

需要补充业务约定时,写入项目指引,见持续开发应用。需要更新依赖提供的 Skills 时,在应用目录运行 pnpm nocobase skills sync,更多选项见命令行参考。

生成文件与运行数据

以下内容不作为业务源码维护:

位置处理方式
node_modules/通过包管理器安装和更新,不直接修改依赖文件
dist/通过 pnpm build 生成;修改源码后重新构建
database/<connection>/collections/数据结构快照,通过 pnpm nocobase collections generate 更新,不手动编辑
storage/保存运行数据,可能包含上传文件、日志或数据库文件,需要按实际配置保留和备份

SQLite 数据库的位置由连接配置决定,也可能在应用根目录。数据库文件和 storage/ 中的业务数据不能当作构建缓存删除。完整路径约定见项目目录与文件约定。

NocoBase 文档助手

关于 NocoBase,你想了解什么?

每次提问独立回答,不会参考之前的问答。请提供完整背景。