8.7 KiB
8.7 KiB
Prettier 代码格式化
Purpose
定义前端代码格式化规则、工具集成、编辑器配置,确保多人协作时代码风格一致。
Requirements
Requirement: Prettier 核心配置
前端 SHALL 在 .prettierrc 文件中配置以下格式化规则:
semi:false— 语句末尾 SHALL NOT 使用分号singleQuote:true— 字符串 SHALL 使用单引号jsxSingleQuote:true— JSX 属性 SHALL 使用单引号tabWidth:2— 缩进 SHALL 使用 2 个空格useTabs:false— 缩进 SHALL NOT 使用制表符trailingComma:"es5"— 多行结构末尾 SHALL 使用 ES5 兼容的尾随逗号printWidth:120— 每行最大字符数 SHALL 为 120bracketSpacing:true— 对象字面量花括号内 SHALL 有空格arrowParens:"always"— 箭头函数参数 SHALL 始终使用括号endOfLine:"lf"— 换行符 SHALL 使用 Unix 风格 (LF)proseWrap:"preserve"— Markdown 文本换行 SHALL 保持原样htmlWhitespaceSensitivity:"css"— HTML 空白处理 SHALL 根据 CSS display 属性embeddedLanguageFormatting:"auto"— 嵌入语言(如 Markdown 中的代码块)SHALL 自动格式化singleAttributePerLine:false— JSX 多属性 SHALL NOT 强制每行一个
Scenario: 格式化 JavaScript 代码
- WHEN 运行
prettier --write格式化 JavaScript 文件 - THEN 代码 SHALL 使用单引号、无分号、2 空格缩进
- THEN 行宽超过 120 字符时 SHALL 自动换行
Scenario: 格式化 TypeScript 代码
- WHEN 运行
prettier --write格式化 TypeScript 文件 - THEN 代码 SHALL 使用单引号、无分号、2 空格缩进
- THEN type import SHALL 保持内联风格
import { type Foo }
Scenario: 格式化 JSX 代码
- WHEN 运行
prettier --write格式化 JSX 文件 - THEN JSX 属性 SHALL 使用单引号
- THEN 多属性 SHALL 根据行宽自动换行
Scenario: 格式化 SCSS 代码
- WHEN 运行
prettier --write格式化 SCSS 文件 - THEN 代码 SHALL 使用 2 空格缩进
- THEN CSS 规则 SHALL 保持一致的格式
Scenario: 格式化 JSON 文件
- WHEN 运行
prettier --write格式化 JSON 文件 - THEN JSON SHALL 使用 2 空格缩进
- THEN JSON SHALL 保持尾随换行
Scenario: 格式化 Markdown 文件
- WHEN 运行
prettier --write格式化 Markdown 文件 - THEN 文本换行 SHALL 保持原样
- THEN 代码块 SHALL 自动格式化
Requirement: Prettier 忽略文件配置
前端 SHALL 在 .prettierignore 文件中配置以下忽略规则:
node_modules— 依赖目录 SHALL NOT 格式化dist— 构建输出 SHALL NOT 格式化dist-ssr— SSR 构建输出 SHALL NOT 格式化bun.lock— Bun 锁文件 SHALL NOT 格式化package-lock.json— npm 锁文件 SHALL NOT 格式化yarn.lock— Yarn 锁文件 SHALL NOT 格式化pnpm-lock.yaml— pnpm 锁文件 SHALL NOT 格式化.env.*— 环境变量文件 SHALL NOT 格式化*.local— 本地配置文件 SHALL NOT 格式化coverage— 测试覆盖率报告 SHALL NOT 格式化**/*.snap— Jest snapshot 文件 SHALL NOT 格式化**/__snapshots__/**— Jest snapshot 目录 SHALL NOT 格式化*.svg— SVG 文件 SHALL NOT 格式化*.min.js— 压缩的 JS 文件 SHALL NOT 格式化*.min.css— 压缩的 CSS 文件 SHALL NOT 格式化openspec/changes/archive/— 已归档的变更 SHALL NOT 格式化
Scenario: 不格式化依赖目录
- WHEN 运行
prettier --write . - THEN
node_modules目录 SHALL NOT 被格式化
Scenario: 不格式化锁文件
- WHEN 运行
prettier --write . - THEN
bun.lock文件 SHALL NOT 被格式化
Scenario: 不格式化测试快照
- WHEN 运行
prettier --write . - THEN
**/*.snap文件 SHALL NOT 被格式化 - THEN
**/__snapshots__/**目录 SHALL NOT 被格式化
Scenario: 不格式化 SVG 文件
- WHEN 运行
prettier --write . - THEN
*.svg文件 SHALL NOT 被格式化
Requirement: EditorConfig 配置
前端 SHALL 在 .editorconfig 文件中配置以下编辑器设置:
root = true— 声明为根配置文件[*]charset = utf-8— 所有文件 SHALL 使用 UTF-8 编码[*]indent_style = space— 所有文件 SHALL 使用空格缩进[*]indent_size = 2— 所有文件 SHALL 使用 2 空格缩进[*]end_of_line = lf— 所有文件 SHALL 使用 Unix 换行符[*]insert_final_newline = true— 所有文件 SHALL 在末尾插入空行[*]trim_trailing_whitespace = true— 所有文件 SHALL 删除行尾空白[*.md]trim_trailing_whitespace = false— Markdown 文件 SHALL NOT 删除行尾空白(Markdown 语法需要)
Scenario: 编辑器使用统一缩进
- WHEN 开发者在编辑器中打开项目
- THEN 编辑器 SHALL 自动使用 2 空格缩进
- THEN 编辑器 SHALL NOT 使用制表符缩进
Scenario: 编辑器使用统一换行符
- WHEN 开发者在编辑器中创建新文件
- THEN 编辑器 SHALL 使用 Unix 换行符 (LF)
- THEN 编辑器 SHALL NOT 使用 Windows 换行符 (CRLF)
Scenario: 编辑器使用统一编码
- WHEN 开发者在编辑器中保存文件
- THEN 文件 SHALL 使用 UTF-8 编码保存
Requirement: VS Code 扩展推荐
前端 SHALL 在 .vscode/extensions.json 文件中推荐以下扩展:
esbenp.prettier-vscode— Prettier 格式化扩展dbaeumer.vscode-eslint— ESLint 检查扩展
Scenario: VS Code 提示安装扩展
- WHEN 开发者使用 VS Code 打开项目
- THEN VS Code SHALL 提示安装推荐的扩展
- THEN 推荐列表 SHALL 包含 Prettier 和 ESLint 扩展
Requirement: VS Code 格式化设置
前端 SHALL 在 .vscode/settings.json 文件中配置以下设置:
editor.formatOnSave = true— 保存时 SHALL 自动格式化editor.defaultFormatter = "esbenp.prettier-vscode"— 默认格式化器 SHALL 为 Prettiereditor.codeActionsOnSave.source.fixAll.eslint = "explicit"— 保存时 SHALL 自动修复 ESLint 问题
Scenario: 保存时自动格式化
- WHEN 开发者在 VS Code 中保存文件
- THEN 文件 SHALL 自动使用 Prettier 格式化
- THEN ESLint 可修复的问题 SHALL 自动修复
Scenario: 使用 Prettier 作为默认格式化器
- WHEN 开发者在 VS Code 中使用格式化命令
- THEN SHALL 使用 Prettier 进行格式化
- THEN SHALL NOT 使用其他格式化器
Requirement: Prettier 与 ESLint 集成
前端 SHALL 在 eslint.config.js 中导入 eslint-config-prettier 配置,关闭与 Prettier 冲突的 ESLint 规则。
Scenario: ESLint 配置集成 Prettier
- WHEN 配置
eslint.config.js - THEN SHALL 导入
eslint-config-prettier - THEN
eslint-config-prettierSHALL 放在配置数组的最后 - THEN 与 Prettier 冲突的 ESLint 规则 SHALL 被关闭
Scenario: ESLint 与 Prettier 不冲突
- WHEN 运行
eslint .和prettier --check . - THEN ESLint 检查和 Prettier 格式化 SHALL NOT 产生冲突
- THEN 同一文件 SHALL NOT 同时报告 ESLint 错误和 Prettier 格式问题
Requirement: 格式化脚本配置
前端 SHALL 在 package.json 中配置以下脚本:
format = "prettier --write ."— 格式化所有文件format:check = "prettier --check ."— 检查文件格式check = "bun run lint && bun run format:check"— 检查 lint 和格式fix = "bun run lint:fix && bun run format"— 修复 lint 问题并格式化
Scenario: 运行格式化命令
- WHEN 执行
bun run format - THEN SHALL 运行
prettier --write . - THEN 所有文件 SHALL 被格式化
Scenario: 运行格式检查命令
- WHEN 执行
bun run format:check - THEN SHALL 运行
prettier --check . - THEN 未格式化的文件 SHALL 报告错误
Scenario: 运行统一检查命令
- WHEN 执行
bun run check - THEN SHALL 运行
bun run lint && bun run format:check - THEN lint 错误和格式问题 SHALL 都被检查
Scenario: 运行统一修复命令
- WHEN 执行
bun run fix - THEN SHALL 运行
bun run lint:fix && bun run format - THEN lint 问题 SHALL 被修复
- THEN 文件 SHALL 被格式化
Requirement: Prettier 依赖安装
前端 SHALL 安装以下依赖:
prettier— Prettier 核心库eslint-config-prettier— 关闭与 Prettier 冲突的 ESLint 规则
Scenario: 安装 Prettier 依赖
- WHEN 执行
bun install - THEN
prettierSHALL 被安装 - THEN
eslint-config-prettierSHALL 被安装 - THEN 依赖版本 SHALL 在
package.json中声明