本文件是针对 AI 编程代理(Agents)的开发规范与指引。在对本项目进行任何修改或设计前,请务必仔细阅读并严格遵循本文件中的约束。
RcloneX 是一个基于 Rclone Remote Control (RC) API 的现代化 Web UI 管理面板,主要用于远程存储配置的 CRUD、文件系统管理及后台任务监控。
| 类别 | 技术选型 | 备注 / 规范要求 |
|---|---|---|
| 基础框架 | React 19 | 函数式组件,使用 FC 类型或 export default function |
| 运行环境 | Node.js v24.x | 必须使用 Node 24 (通过 .node-version 锁定) |
| 开发语言 | TypeScript 7.0.2 | 强制开启 strict 模式,禁止使用 any |
| 构建系统 | Rsbuild v2 | 基于 Rspack 驱动,插件使用 @rsbuild/plugin-react |
| 样式系统 | Tailwind CSS v4 | CSS Variables 驱动主题,严禁使用内联 style |
| UI 组件库 | shadcn/ui | 统一使用 new-york 风格,自 @/components/ui/ 导入 |
| 图标系统 | lucide-react | 统一样式与设计语言 |
| 路由导航 | react-router v7 | 支持动态与嵌套路由 |
| 国际化 | i18next + react-i18next | 支持中英文切换,默认语言 zh-CN |
| 网络请求 | Axios (NetworkClient 单例) | 自动处理鉴权 Token,401 自动重定向至登录页 |
| 表单方案 | react-hook-form + Zod | 表单数据校验与动态配置表单生成 |
| 通知反馈 | sonner | 全局 Toast 提示 |
| 主题切换 | next-themes | 亮色/暗色模式切换 |
| 代码规范 | oxlint + oxfmt | 包含代码 Lint 校验与极速代码格式化 |
| 测试框架 | Vitest | 单元测试与集成测试 |
| 工具链/包管理器 | pnpm 11.x | 依赖安装、脚本执行与版本锁定(锁文件 pnpm-lock.yaml) |
| 别名 | 映射路径 | 目标用途 |
|---|---|---|
@/* |
src/* |
基础路径前缀 |
@pages/* |
src/pages/* |
各大功能页面组件 |
@components/* |
src/components/* |
全局共享 UI / 布局组件 |
@utils / @utils/* |
src/shared/utils |
全局公共工具单例 / 方法 |
src/
├── assets/ # 静态资源目录(如 appIcon.png)
├── components/ # 共享 UI 组件
│ ├── ui/ # shadcn/ui 导出的原子组件(Button, Card, Dialog 等)
│ ├── Header.tsx # 全局头部组件
│ └── ErrorFallback.tsx # 错误边界 Fallback 视图
├── hooks/ # 自定义 React Hooks(例如 use-user, use-mobile)
├── lib/utils/ # 样式合并等辅助工具函数 (cn = clsx + tailwind-merge)
├── locales/ # 国际化语言包目录
│ ├── en-US/translation.json
│ ├── zh-CN/translation.json
│ └── i18n.ts
├── pages/ # 核心功能页面(按业务模块组织)
│ ├── App.tsx # 路由配置与应用入口定义
│ ├── home/ # 主页布局 (Sidebar + Header + Outlet)
│ ├── login/ # 登录鉴权页
│ ├── dashboard/ # 仪表盘监控页
│ ├── config/ # 存储配置 CRUD 页
│ ├── explorer/ # 文件浏览器页
│ ├── tasks/ # 传输与后台任务管理页
│ ├── mounts/ # 远程挂载点管理页
│ └── logs/ # 系统实时日志页
├── shared/utils/ # 全局共享模块与单例
│ ├── net.ts # NetworkClient (Axios 封装,带拦截器)
│ └── local.ts # localStorage 统一读写工具
├── styles/globals.css # 全局样式文件与 Tailwind CSS Variables 主题定义
├── env.d.ts # 全局类型定义声明
└── index.tsx # Web App 的渲染挂载入口
在开发调试或代码提交前,需通过 pnpm 执行以下命令:
# 启动开发服务器(自动打开浏览器,端口默认为 3000)
pnpm run dev
# 执行生产打包编译
pnpm run build
# 本地预览打包后的生产产物
pnpm run preview
# 启动本地 Rclone 模拟测试环境
pnpm run start:rclone
# 备注:实际执行命令为: rclone rcd --rc-addr :5572 --rc-user dev --rc-pass 1234 --rc-allow-origin http://localhost:3000
# 运行 Vitest 进行单元与集成测试(单次运行模式)
pnpm run test
# 验证 TypeScript 类型安全性
pnpm run check
# 运行 oxfmt 自动格式化项目代码
pnpm run fmt
# 运行 oxlint 进行代码 Lint 静态检查
pnpm run lint- 语言要求:AI 代理在进行自我思考(thought 过程)以及与用户交流沟通时,必须统一使用中文(Chinese)。
任何时候只要你修改了代码,必须依次运行以下命令确保项目格式与类型无误:
pnpm run lint:通过 oxlint 进行静态代码 Lint 检查。pnpm run fmt:通过 oxfmt 进行代码排版格式化。pnpm run check:验证没有 TypeScript 类型编译错误。pnpm run test:运行所有单元测试,保证未引入回归 Bug。
- 文件后缀:所有的 React 组件文件必须使用
.tsx扩展名,非组件逻辑使用.ts。 - UI 标准:统一使用 shadcn/ui 组件,直接从
@/components/ui/导入。禁止手动编写复杂的底层 HTML CSS 样式。 - 图标选用:统一从
lucide-react导入,保持视觉一致性。 - 内联样式:严禁在组件中写
style={{...}}内联样式,必须使用 Tailwind CSS 类名。 - 页面组织:
- 各个页面级组件必须放入
src/pages/<page-name>/目录下。 - 页面对应的 API 请求服务必须放在
src/pages/<page-name>/services/index.ts中。 - 页面主入口文件必须命名为
index.tsx,该页面专用的子组件直接存放在同级目录下。
- 各个页面级组件必须放入
- 必须导入并使用
@utils/net中导出的NetworkClient单例。 - 接口请求不需要手动设置 token,底层拦截器会自动从 localStorage 中的
rclone-rc与rclone-token获取配置并附加在 Headers 中。 - Axios 响应拦截器已配置为自动提取
response.data。当检测到 401 未授权错误时,程序会自动清理凭证并重定向至/login。
- 任何直接呈现在 UI 上、供最终用户阅读的静态/动态文本,禁止直接硬编码,必须使用
useTranslation()的t()函数包裹。 - 新增文案必须在 locales 目录中同时为
en-US/translation.json和zh-CN/translation.json补充对应的中英文翻译。 - 默认语言为
zh-CN。
- 编写代码逻辑(如新 Hooks、新 utils 函数或复杂组件)后,必须在同级目录(或对应位置)编写配套的测试文件,命名规则为
*.test.ts或*.test.tsx。 - 在编写 React Component / Hook 的测试时,使用
@testing-library/react与jsdom环境,涉及localStorage或fetch时应提前对其进行清理(localStorage.clear())或模拟(Mock)。
- 必须启用并遵循 TS Strict 模式。绝对禁止使用
any类型,应优先选择unknown或定义明确的interface/type。 - 全局编译选项已开启
noUnusedLocals和noUnusedParameters,注意清理无用的导入和参数。 - 数据接口(Interfaces)应就近定义,API 请求与响应参数类型应统一在对应的
services文件中声明。
- 版本注入:前端可通过
process.env.APP_VERSION获取版本号,该变量是通过 Rsbuild 的source.define从package.json中的version自动注入的。