前端规范质量门禁

前端规范的目标不是限制写法,而是让项目命名、目录组织、编码风格、提交流程和质量检查都变成团队可以复用的协作接口。

本文整理前端团队在项目命名、目录结构、HTML/CSS/JavaScript(TypeScript)编码、提交流程等方面的统一实践。关联后端规范与 Git 使用规范时,页面中以纯文本呈现,不保留 Obsidian 双链格式。

规范目的与能愿动词

  • 高效协作:降低沟通与接手成本。
  • 风格统一:统一代码风格和工程组织方式。
  • 质量可控:通过自动化检查减少低级错误。
  • 便于维护:提升可读性、可扩展性和可追溯性。

文档中的“必须”表示无条件遵守,“绝不”表示严令禁止,“应该”表示强烈建议,“不应该”表示强烈不建议。

项目与文件命名

  • 项目名必须全小写,多单词必须使用中划线分隔,例如 clinic-admin-webdrug-inventory-h5
  • 项目名绝不使用中文、空格、下划线或驼峰,例如 ClinicAdminWebclinic_admin_web 都不建议。
  • 普通目录和文件应该使用小写中划线风格,例如 order-list.ts
  • 组件文件在框架允许时可以使用 PascalCase,但同一项目内必须统一。

目录结构建议

project-name/
├── src/
│   ├── assets/      # 静态资源
│   ├── components/  # 通用组件
│   ├── pages/       # 页面级模块
│   ├── layouts/     # 布局组件
│   ├── router/      # 路由配置
│   ├── store/       # 状态管理
│   ├── services/    # API 请求层
│   ├── hooks/       # 复用逻辑
│   ├── utils/       # 工具函数
│   ├── styles/      # 全局样式/变量
│   ├── constants/   # 常量定义
│   └── types/       # 类型定义
├── public/
├── tests/
└── docs/

HTML、CSS 与 TypeScript

HTML

  • 标签与属性名必须小写,属性值必须使用双引号。
  • 结构类标签应该使用语义化元素,例如 headermainsectionfooter
  • img 必须提供 alt,表单控件应该配套 label
  • 缩进必须统一,建议 2 空格。

CSS / SCSS

  • class 名必须小写中划线,复杂样式应该使用 BEM 命名法。
  • 样式不应该依赖 id 选择器,绝不滥用 !important
  • 颜色、间距、字号应该抽为变量或 token,嵌套层级不应该超过 3 层。

JavaScript / TypeScript

  • 变量和函数使用 camelCase,类、类型、接口、组件使用 PascalCase,常量使用 UPPER_SNAKE_CASE
  • 布尔变量应该使用 ishascan 前缀。
  • 一个函数应该只做一件事,优先使用 const,必要时再使用 let,绝不使用 var
  • 异步流程必须处理错误,TypeScript 项目不应该随意使用 any
前端规范的关键,是把“个人习惯”翻译成“团队可以检查的接口”。

组件、状态与质量门禁

  • 组件职责应该单一:页面组装与业务逻辑拆分。
  • 可复用逻辑应该抽离到 hooks/composables/
  • API 调用必须收敛在 services/,页面层不直接拼接请求。
  • 全局状态应该只存共享状态,不存纯展示状态。
  • 项目必须配置并启用 ESLint + Prettier
  • 合并前必须通过 linttype-checktestbuild
  • 应该启用 husky + lint-staged,在提交前自动检查;CI 必须在 PR 阶段执行质量校验。

Git 与 PR 自检

分支规范应与团队 Git 流程对齐,例如 dev/{日期}/{需求}fix/{日期}/{需求}。提交信息建议使用语义化前缀:feat:fix:refactor:docs:style:test:chore:

  • 命名是否符合项目、目录、文件、变量规范。
  • 是否通过 lint、type-check、test、build。
  • 是否存在内联样式、!important 滥用或超深嵌套。
  • API 调用是否集中在 services/
  • 分支命名与提交信息是否符合规范。