|
|
#项目规范
|
|
|
|
|
|
## 技术栈
|
|
|
|
|
|
- 前端:Tauri + Vue 3 + TypeScript
|
|
|
- 后端:Java + Spring Boot
|
|
|
- 数据库:MS SQL Server 或 OceanBase
|
|
|
|
|
|
## 代码规范
|
|
|
|
|
|
- 函数名用 camelcase,组件名用 Pascalcase
|
|
|
- 常量:UPPER_SNAKE_CASE
|
|
|
- 文件名:一般 kebab-case 或与默认导出组件同名 PascalCase
|
|
|
- 布尔值变量以 is / has / should 开头,如 isLoading
|
|
|
- 所有函数必须有 JSDoc 注释
|
|
|
- 错误处理必须用 try/catch,不能用.catch()
|
|
|
- 行尾无空白,文件末尾保留一个空行
|
|
|
- 一行代码不超过 100 / 120 个字符(常见 100),超长时合理换行
|
|
|
- 不加分号
|
|
|
- 普通字符串用 单引号 'hello',需要插值时用反引号模板字符串
|
|
|
- JSX 属性用双引号
|
|
|
- 严格的导入顺序:第三方库(React、axios 等)> 内部路径别名模块(如 @/components)> 相对路径模块(./utils)> 样式文件
|
|
|
- 禁止通配符导入(import \* as … 只在极少数必要情况)
|
|
|
- 分组之间保留空行,同类按字母排序
|
|
|
- 任何有意义的数字和字符串必须提取为 命名常量
|
|
|
- 始终使用 === 和 !==,避免隐式类型转换带来问题
|
|
|
- 单一职责:一个函数只做一件事
|
|
|
- 长度:单个函数不超过 50 行(逻辑复杂时拆小)
|
|
|
- 参数数量:不超过 3 个,超出时用对象参数
|
|
|
- 提前返回(Return Early):避免深层 if 嵌套,提高可读性
|
|
|
- 纯函数优先:不修改入参,避免副作用
|
|
|
- 所有 async/await 必须 try/catch 或附加 .catch()
|
|
|
- 严禁空 catch 块,至少要记录日志或显式忽略并注释原因
|
|
|
- Promise 的拒绝必须处理(unhandled rejection 零容忍)
|
|
|
- 所有 导出的函数、类、类型、接口、组件 必须写 JSDoc / TSDoc 注释,描述用途、参数、返回值
|
|
|
- 复杂逻辑用行注释解释“为什么”,而非“做什么”
|
|
|
- 使用 // TODO: 和 // FIXME: 标记,并要求 AI 不在生产代码留大段注释掉的旧代码
|
|
|
- 不保留未使用的变量、导入、函数(可由 ESLint 直接检测)
|
|
|
- 不留下 console.log 调试语句(除非严格限定的日志工具)
|
|
|
- 一个文件一个主要导出(默认导出或单一组件),相关工具/类型可并存
|
|
|
- 文件总行数建议不超过 300 行(组件可适当放宽,但组件太长也要拆分)
|
|
|
|
|
|
## 禁止行为
|
|
|
|
|
|
- 禁用 var,全部使用 const / let,优先 const,只有确实需要重新赋值才用 let
|
|
|
- 不使用 any 类型
|
|
|
- 不写裸 console.log,用统一的 logger
|
|
|
- css不用内联样式
|
|
|
- 禁止混用 Tab,使用 2 个空格(或 4 个,项目统一即可)
|
|
|
|
|
|
## 提交规范
|
|
|
|
|
|
feat:新功能 |fix:修复| refactor:重构
|