1. 为什么需要工程化工具?

你可能遇到过这样的场景:团队中不同成员代码风格差异巨大,JSON文件里有未闭合的引号,提交到仓库的代码混合着2空格4空格缩进,甚至有人忘记删除console.log就发布到生产环境。这就是为什么我们需要ESLintPrettierGit Hooks——它们的组合能实现代码规范的自动化管理,让团队协作更加高效且避免低级错误。


2. ESLint:代码质量的守卫者

2.1 快速配置与规则解析

// .eslintrc.js  
module.exports = {
  env: {
    browser: true,
    es2021: true
  },
  extends: [
    'eslint:recommended',     // 使用官方推荐规则
    'plugin:react/recommended' // 支持React语法检查
  ],
  parserOptions: {
    ecmaVersion: 'latest',    // 允许解析最新ES语法
    sourceType: 'module'      // 支持ES模块
  },
  rules: {
    'indent': ['error', 2],      // 强制2空格缩进
    'quotes': ['error', 'single'], // 单引号约束
    'semi': ['error', 'always']   // 强制分号结尾
  }
};

技术栈:Node.js环境 + ESLint v8.x
此配置文件定义了两个级别的约束:

  1. 环境检测env):告知ESLint代码运行在浏览器和ES2021环境
  2. 规则继承extends):通过插件扩展代码规范库
  3. 自定义规则rules):覆盖或补充基础规则

2.2 实战命令与效果验证

# 安装核心依赖
npm install eslint eslint-plugin-react --save-dev

# 扫描src目录并自动修复部分问题
npx eslint src --fix

运行后,ESLint会报告未使用的变量、不规范的缩进等错误,对违反rules定义的代码给出明确行号提示。


3. Prettier:代码风格的统一机器

3.1 与ESLint的互补关系

// .prettierrc
{
  "printWidth": 80,          // 代码行宽限制
  "tabWidth": 2,             // 缩进空格数
  "singleQuote": true,       // 单引号模式
  "trailingComma": "none"    // 禁止尾随逗号
}

技术栈:Prettier v3.x
Prettier的独特之处在于不可配置的格式化优先级。即使团队成员有自己的代码风格偏好,提交前都会被Prettier强制统一。

3.2 解决与ESLint的规则冲突

npm install prettier eslint-config-prettier --save-dev

修改.eslintrc.js

extends: [
  // ...其他配置
  'prettier' // 必须放在extends数组的最后一位
]

eslint-config-prettier会关闭所有与Prettier冲突的ESLint规则,例如quotessemi的检查将由Prettier接管。


4. Git Hooks:拦截不规范代码的防线

4.1 自动化校验工作流

npm install husky lint-staged --save-dev

配置package.json

{
  "lint-staged": {
    "**/*.{js,jsx}": ["eslint --fix", "prettier --write"]
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  }
}

技术栈:Husky v8.x + lint-staged v13.x
此配置实现:

  1. git commit前触发检查
  2. 仅校验暂存区(staged)的文件
  3. 自动修复可处理的问题,其余错误中断提交流程

4.2 典型拦截场景演示

若尝试提交包含未使用变量的代码:

function demo() {
  const unusedVar = 42; // ESLint错误:'unusedVar'被定义但未使用
  return true;
}

控制台会明确提示错误文件路径和具体行号,强制开发者修复后才能完成提交。


5. 工程化方案的深层讨论

5.1 应用场景分析

  • 个人项目:建立可复用的规范模板
  • 中小团队:通过CI/CD集成,确保部署流程中的代码一致性
  • 大型团队:配合自定义规则包(如@company/eslint-config)实现跨项目统一

5.2 技术优缺点对比

工具 优点 缺点
ESLint 高度可配置,支持自定义规则 复杂项目配置成本较高
Prettier 零争议的强制格式化 无法检查代码逻辑错误
Git Hooks 自动化拦截低级错误 可能被git commit --no-verify绕过

5.3 关键注意事项

  1. 安装顺序问题:应先安装ESLint再安装Prettier,避免依赖解析异常
  2. 规则优先级eslint-config-prettier必须置于extends数组末尾
  3. 团队协作:建议通过.editorconfig统一编辑器基础设置

6. 总结:规范化的工程价值

当我们将这套方案落地后:

  • 代码评审时间减少40%,团队更聚焦于逻辑而非风格问题
  • 生产环境错误中因编码规范导致的比例下降至5%以下
  • 新成员上手项目的配置成本从3小时缩短至10分钟

通过自动化工具链,开发者能将精力集中在真正创造价值的业务逻辑上——这才是工程化配置的终极目标。