Loading... ## 引言 在现代前端工程实践中,代码质量和团队协作效率的提升离不开完善的自动化工具链。本文将系统性地介绍如何构建一套完整的代码质量保障体系,涵盖代码检查、格式化和提交前自动验证等关键环节。 ### 问题背景 在团队协作开发中,代码风格不一致是一个普遍存在的问题。不同开发者可能采用不同的缩进方式、引号风格等编码习惯,这导致代码审查过程中产生大量与业务逻辑无关的讨论,降低了团队协作效率。 通过引入自动化工具链,我们可以有效解决这一问题。本文将介绍以下核心工具的配置与集成: - **ESLint**:静态代码分析工具,用于检测代码质量问题和潜在错误 - **Prettier**:代码格式化工具,统一代码风格 - **Stylelint**:样式代码检查工具,确保 CSS/SCSS 代码质量 - **Husky**:Git hooks 管理工具,在关键节点触发自动化流程 - **Lint-staged**:增量检查工具,仅对暂存文件执行检查,提升效率 ## 工具概览与职责划分 在配置之前,理解各工具的职责边界至关重要,特别是 ESLint 和 Prettier 的区分。 ### ESLint:代码质量分析 **核心功能** ESLint 是一个可插拔、可配置的 JavaScript/TypeScript 静态代码分析工具。它通过解析代码为抽象语法树(AST)来检测代码模式,主要目标是发现潜在错误并强制执行最佳实践。 **检测范围** - 变量使用前未定义(`no-use-before-define`) - 潜在的逻辑错误 - 代码异味和反模式 - TypeScript 类型相关问题(通过 `typescript-eslint`) **架构特点** ESLint 采用完全可插拔的架构。核心规则和插件系统支持社区扩展,可针对特定框架(如 React)或语言特性进行定制。 ### Prettier:代码格式化 **核心功能** Prettier 是一个固执己见(Opinionated)的代码格式化工具。它将代码解析后按照预设规则重新格式化,确保整个团队的代码风格完全一致。 **处理范围** - 行长度控制 - 缩进方式 - 引号类型 - 分号使用 - 支持多种语言(JavaScript、TypeScript、CSS、HTML、JSON、Markdown 等) **设计理念** Prettier 有意限制配置选项,秉承"配置一次,永久生效"的理念,最大程度减少团队内部关于代码风格的争论。 ### Stylelint:样式代码检查 **核心功能** Stylelint 是专门针对 CSS 及类 CSS 语法(SCSS、Sass、Less)的现代化 linter 工具。 **检测能力** - 样式错误(如格式错误的网格区域、重复选择器) - 代码规范强制(如禁用特定单位、命名模式验证) - 选择器复杂度控制 **扩展性** 支持可共享配置,能够解析嵌入在 HTML、Markdown 和 CSS-in-JS 中的样式代码。 ### Husky:Git Hooks 管理 **核心功能** Husky 是一个轻量级的 Git hooks 管理工具,简化了 `pre-commit`、`pre-push` 等钩子的配置和使用。 **工作机制** 利用 Git 的 `core.hooksPath` 配置,实现高效的钩子管理。初始化后在项目根目录创建 `.husky/` 目录存放钩子脚本。 ### Lint-staged:增量检查 **核心功能** Lint-staged 仅对 Git 暂存区(staged)的文件执行 linter 和 formatter。 **性能优势** 避免对整个项目执行检查,显著提升提交前检查的执行速度。与 Husky 的 `pre-commit` 钩子配合使用效果最佳。 ### 工具职责对照表 | 工具 | 核心功能 | 主要配置文件 | VS Code 插件 ID | |------|----------|--------------|-----------------| | **ESLint** | 代码质量与错误检测 | `eslint.config.js` | `dbaeumer.vscode-eslint` | | **Prettier** | 代码格式化 | `.prettierrc.js` | `esbenp.prettier-vscode` | | **Stylelint** | CSS/SCSS 质量检查 | `stylelint.config.js` | `stylelint.vscode-stylelint` | | **Husky** | Git hooks 管理 | `.husky/pre-commit` | N/A | | **Lint-staged** | 暂存文件任务执行 | `package.json` | N/A | ## 分步配置指南 本节将详细说明如何为 TypeScript + React 项目构建完整的自动化工具链。 ### 环境要求 - Node.js 版本:`^18.18.0`、`^20.9.0` 或 `>=21.1.0` - 项目已初始化 `package.json` ### 第一步:配置 Prettier Prettier 配置相对独立,建议首先完成其设置。 **安装依赖** ```bash npm install --save-dev --save-exact prettier ``` 使用 `--save-exact` 标志锁定版本,确保团队成员使用相同版本,避免格式化结果差异。 **创建配置文件** 创建 `.prettierrc.js` 文件: ```javascript /** @type {import("prettier").Config} */ module.exports = { printWidth: 80, tabWidth: 2, useTabs: false, semi: true, singleQuote: true, quoteProps: 'as-needed', jsxSingleQuote: false, trailingComma: 'all', bracketSpacing: true, arrowParens: 'always', endOfLine: 'lf', }; ``` **创建忽略文件** 创建 `.prettierignore` 文件: ``` node_modules build dist coverage .vscode public ``` ### 第二步:配置 ESLint (Flat Config) **重要更新** ESLint v9 已将 Flat Config(`eslint.config.js`)作为默认配置格式,取代了传统的 `.eslintrc` 格式。Flat Config 采用 ES 模块导入,支持更精确的 glob 模式匹配,配置逻辑更清晰。 **安装核心依赖** ```bash npm install --save-dev eslint @eslint/js typescript typescript-eslint ``` **安装 React 插件** ```bash npm install --save-dev eslint-plugin-react eslint-plugin-react-hooks ``` **安装 Prettier 集成** ```bash npm install --save-dev eslint-config-prettier ``` **ESLint 与 Prettier 集成策略** **关键概念**:仅使用 `eslint-config-prettier`,避免使用 `eslint-plugin-prettier`。 - `eslint-config-prettier`:禁用与 Prettier 冲突的 ESLint 规则 - `eslint-plugin-prettier`(不推荐):将 Prettier 作为 ESLint 规则运行,会降低性能并产生冗余提示 正确的做法是让 ESLint 和 Prettier 独立运行,各司其职。 **创建配置文件** 创建 `eslint.config.js` 文件: ```javascript import eslint from '@eslint/js'; import tseslint from 'typescript-eslint'; import react from 'eslint-plugin-react'; import reactHooks from 'eslint-plugin-react-hooks'; import eslintConfigPrettier from 'eslint-config-prettier'; import globals from 'globals'; export default tseslint.config( // 全局忽略配置 { ignores: ['dist/**', 'build/**', 'node_modules/**'], }, // ESLint 推荐规则 eslint.configs.recommended, // TypeScript-ESLint 推荐规则 ...tseslint.configs.recommended, // React 配置 { files: ['**/*.{js,jsx,mjs,cjs,ts,tsx}'], plugins: { react }, languageOptions: { ...react.configs.recommended.languageOptions, globals: { ...globals.browser }, }, rules: { ...react.configs.recommended.rules, // React 17+ 不需要手动导入 React 'react/react-in-jsx-scope': 'off', 'react/jsx-uses-react': 'off', }, }, // React Hooks 配置 { files: ['**/*.{js,jsx,mjs,cjs,ts,tsx}'], plugins: { 'react-hooks': reactHooks }, rules: reactHooks.configs.recommended.rules, }, // Prettier 集成配置(必须放在最后) eslintConfigPrettier, ); ``` **配置说明** - `ignores` 字段用于排除不需要检查的文件 - 使用扩展运算符应用推荐规则集 - `eslintConfigPrettier` 必须作为最后一个配置项,以确保正确禁用冲突规则 ### 第三步:配置 Stylelint **安装依赖** ```bash npm install --save-dev stylelint stylelint-config-standard-scss ``` **创建配置文件** 创建 `stylelint.config.js` 文件: ```javascript /** @type {import('stylelint').Config} */ export default { extends: ['stylelint-config-standard-scss'], rules: { 'custom-property-pattern': [ '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$', { message: '自定义属性应使用 kebab-case 命名', }, ], 'scss/dollar-variable-pattern': null, }, }; ``` **创建忽略文件** 创建 `.stylelintignore` 文件: ``` node_modules build dist coverage ``` ### 第四步:配置 Husky **安装依赖** ```bash npm install --save-dev husky ``` **初始化 Husky** ```bash npx husky init ``` 此命令会: - 创建 `.husky/` 目录 - 在 `package.json` 中添加 `prepare` 脚本 **验证配置** 检查 `package.json` 中是否包含: ```json { "scripts": { "prepare": "husky" } } ``` `prepare` 脚本确保在 `npm install` 后自动设置 Git hooks,团队成员无需手动配置。 ### 第五步:配置 Lint-staged **安装依赖** ```bash npm install --save-dev lint-staged ``` **配置检查任务** 在 `package.json` 中添加: ```json { "lint-staged": { "*.{js,jsx,ts,tsx}": [ "eslint --fix", "prettier --write" ], "*.{css,scss}": [ "stylelint --fix", "prettier --write" ], "*.{md,json}": "prettier --write" } } ``` **配置说明** - 不同文件类型匹配不同的命令序列 - `--fix` 和 `--write` 标志启用自动修复 - 命令按顺序执行 ### 第六步:配置 Pre-commit Hook **编辑钩子文件** 编辑 `.husky/pre-commit` 文件: ```bash npx lint-staged ``` 完整的工作流程: 1. 开发者执行 `git commit` 2. Git 触发 `pre-commit` 钩子 3. Husky 执行 `.husky/pre-commit` 脚本 4. 调用 `lint-staged` 5. Lint-staged 获取暂存文件列表 6. 根据配置对文件执行 ESLint、Stylelint 和 Prettier 7. 如检查失败,提交中止;如成功,自动修复的内容加入提交 ## VS Code 编辑器集成 为提升开发体验,建议配置编辑器实时反馈。 ### 安装插件 - ESLint: `dbaeumer.vscode-eslint` - Prettier: `esbenp.prettier-vscode` - Stylelint: `stylelint.vscode-stylelint` ### 工作区配置 创建 `.vscode/settings.json` 文件: ```json { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit", "source.fixAll.stylelint": "explicit" }, "stylelint.validate": ["css", "scss"] } ``` **配置说明** - 设置 Prettier 为默认格式化工具 - 启用保存时自动格式化 - 启用保存时自动修复 ESLint 和 Stylelint 问题 - 指定 Stylelint 验证的文件类型 ## 总结 通过本文的配置步骤,您可以为项目构建一个完整的自动化代码质量保障体系。这套系统能够: - 统一团队代码风格 - 自动检测和修复代码问题 - 在提交前拦截不合规代码 - 提供实时的编辑器反馈 建议在实际应用中根据项目需求调整具体规则配置,逐步完善自动化流程。 ## 附录:快速参考 ### 依赖安装汇总 **核心工具** ```bash npm install --save-dev --save-exact prettier npm install --save-dev eslint @eslint/js typescript typescript-eslint npm install --save-dev eslint-plugin-react eslint-plugin-react-hooks npm install --save-dev eslint-config-prettier npm install --save-dev stylelint stylelint-config-standard-scss ``` **自动化工具** ```bash npm install --save-dev husky lint-staged ``` ### 配置文件清单 本文涉及的配置文件: - `.prettierrc.js` - Prettier 配置 - `.prettierignore` - Prettier 忽略文件 - `eslint.config.js` - ESLint 配置(Flat Config) - `stylelint.config.js` - Stylelint 配置 - `.stylelintignore` - Stylelint 忽略文件 - `.husky/pre-commit` - Git pre-commit 钩子 - `.vscode/settings.json` - VS Code 工作区配置 - `package.json` - Lint-staged 配置 --- *本文由IvanHanloth主写,使用Claude进行代码修正和文风调整,请注意检查潜在的错误* Last modification:September 30, 2025 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏