首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ESLint + Prettier 代码规范统一指南

ESLint + Prettier 代码规范统一指南

作者头像
fruge365
发布2025-12-15 13:16:14
发布2025-12-15 13:16:14
5640
举报

ESLint + Prettier 代码规范统一指南

代码规范的重要性

为什么需要代码规范?

在现代前端开发中,代码规范不仅仅是"好看"的问题,它关系到:

🎯 核心价值
  1. 提高代码质量
    • 减少潜在 bug
    • 提升代码可读性
    • 统一编码风格
  2. 提升团队效率
    • 降低代码审查成本
    • 减少沟通成本
    • 提高开发效率
  3. 降低维护成本
    • 便于代码重构
    • 易于新人上手
    • 减少技术债务
📊 数据支撑
代码语言:javascript
复制
统计数据显示:
- 规范化的代码可以减少 40% 的 bug 率
- 团队协作效率提升 30%
- 代码审查时间减少 50%

ESLint 详细介绍

什么是 ESLint?

ESLint 是一个开源的 JavaScript 代码检查工具,用于识别和报告代码中的模式匹配问题。

基础安装和配置
1. 安装 ESLint
代码语言:javascript
复制
# 全局安装
npm install -g eslint

# 项目本地安装(推荐)
npm install --save-dev eslint

# 使用 yarn
yarn add --dev eslint

# 使用 pnpm
pnpm add -D eslint
2. 初始化配置
代码语言:javascript
复制
# 交互式初始化
npx eslint --init

# 或者使用
npm init @eslint/config
3. 基础配置文件

创建 .eslintrc.js 文件:

代码语言:javascript
复制
module.exports = {
  // 环境配置
  env: {
    browser: true,
    es2021: true,
    node: true,
    jest: true
  },
  
  // 继承的配置
  extends: [
    'eslint:recommended',
    '@typescript-eslint/recommended'
  ],
  
  // 解析器配置
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    ecmaFeatures: {
      jsx: true
    }
  },
  
  // 插件
  plugins: [
    '@typescript-eslint',
    'react',
    'react-hooks'
  ],
  
  // 自定义规则
  rules: {
    // 基础规则
    'no-console': 'warn',
    'no-debugger': 'error',
    'no-unused-vars': 'error',
    
    // 代码风格
    'indent': ['error', 2],
    'quotes': ['error', 'single'],
    'semi': ['error', 'always'],
    
    // React 相关
    'react/jsx-uses-react': 'error',
    'react/jsx-uses-vars': 'error',
    'react-hooks/rules-of-hooks': 'error',
    'react-hooks/exhaustive-deps': 'warn'
  },
  
  // 忽略配置
  ignorePatterns: [
    'dist/',
    'build/',
    'node_modules/',
    '*.min.js'
  ]
};
高级配置选项
1. 自定义规则配置
代码语言:javascript
复制
module.exports = {
  rules: {
    // 错误级别:off/0, warn/1, error/2
    
    // 变量相关
    'no-undef': 'error',
    'no-unused-vars': ['error', { 
      vars: 'all',
      args: 'after-used',
      ignoreRestSiblings: false 
    }],
    
    // 代码质量
    'complexity': ['warn', 10],
    'max-depth': ['warn', 4],
    'max-lines': ['warn', 300],
    'max-params': ['warn', 4],
    
    // 最佳实践
    'eqeqeq': ['error', 'always'],
    'no-eval': 'error',
    'no-implied-eval': 'error',
    'prefer-const': 'error',
    'no-var': 'error',
    
    // ES6+ 特性
    'arrow-spacing': 'error',
    'prefer-arrow-callback': 'error',
    'prefer-template': 'error'
  }
};
2. 插件使用
代码语言:javascript
复制
module.exports = {
  plugins: [
    // TypeScript 支持
    '@typescript-eslint',
    
    // React 支持
    'react',
    'react-hooks',
    
    // Vue 支持
    'vue',
    
    // 导入检查
    'import',
    
    // JSX a11y
    'jsx-a11y',
    
    // 安全检查
    'security'
  ],
  
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:react/recommended',
    'plugin:react-hooks/recommended',
    'plugin:import/recommended',
    'plugin:jsx-a11y/recommended',
    'plugin:security/recommended'
  ]
};
3. 环境特定配置
代码语言:javascript
复制
module.exports = {
  // 覆盖配置
  overrides: [
    {
      // 测试文件配置
      files: ['**/*.test.js', '**/*.spec.js'],
      env: {
        jest: true
      },
      rules: {
        'no-console': 'off'
      }
    },
    {
      // TypeScript 文件配置
      files: ['**/*.ts', '**/*.tsx'],
      parser: '@typescript-eslint/parser',
      rules: {
        '@typescript-eslint/no-unused-vars': 'error',
        '@typescript-eslint/explicit-function-return-type': 'warn'
      }
    }
  ]
};

Prettier 详细介绍

什么是 Prettier?

Prettier 是一个代码格式化工具,支持多种语言,能够自动格式化代码以保持一致的风格。

基础安装和配置
1. 安装 Prettier
代码语言:javascript
复制
# 项目本地安装
npm install --save-dev prettier

# 使用 yarn
yarn add --dev prettier

# 使用 pnpm
pnpm add -D prettier
2. 基础配置文件

创建 .prettierrc.js 文件:

代码语言:javascript
复制
module.exports = {
  // 基础配置
  printWidth: 80,           // 每行最大字符数
  tabWidth: 2,              // 缩进空格数
  useTabs: false,           // 使用空格而不是 tab
  semi: true,               // 语句末尾添加分号
  singleQuote: true,        // 使用单引号
  quoteProps: 'as-needed',  // 对象属性引号
  
  // JSX 配置
  jsxSingleQuote: true,     // JSX 中使用单引号
  jsxBracketSameLine: false, // JSX 标签闭合位置
  
  // 数组和对象
  trailingComma: 'es5',     // 尾随逗号
  bracketSpacing: true,     // 对象字面量空格
  
  // 箭头函数
  arrowParens: 'avoid',     // 箭头函数参数括号
  
  // 其他
  endOfLine: 'lf',          // 换行符
  embeddedLanguageFormatting: 'auto', // 嵌入语言格式化
  
  // HTML 配置
  htmlWhitespaceSensitivity: 'css',
  
  // Vue 配置
  vueIndentScriptAndStyle: false
};
3. 忽略文件配置

创建 .prettierignore 文件:

代码语言:javascript
复制
# 依赖
node_modules/
package-lock.json
yarn.lock
pnpm-lock.yaml

# 构建产物
dist/
build/
coverage/

# 配置文件
.env
.env.local
.env.production

# 其他
*.min.js
*.min.css
public/
高级配置选项
1. 文件类型特定配置
代码语言:javascript
复制
module.exports = {
  // 全局配置
  printWidth: 80,
  tabWidth: 2,
  
  // 覆盖配置
  overrides: [
    {
      files: '*.json',
      options: {
        tabWidth: 4
      }
    },
    {
      files: '*.md',
      options: {
        printWidth: 100,
        proseWrap: 'always'
      }
    },
    {
      files: '*.{css,scss,less}',
      options: {
        singleQuote: false
      }
    }
  ]
};
2. 编辑器集成

VS Code 配置 (.vscode/settings.json):

代码语言:javascript
复制
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  },
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[json]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  }
}

WebStorm 配置

  1. 打开 Settings → Tools → File Watchers
  2. 添加 Prettier 文件监听器
  3. 配置自动格式化

ESLint + Prettier 集成配置

解决冲突问题

ESLint 和 Prettier 在某些规则上可能存在冲突,需要正确配置来避免。

1. 安装集成插件
代码语言:javascript
复制
# 安装 eslint-config-prettier(禁用冲突规则)
npm install --save-dev eslint-config-prettier

# 安装 eslint-plugin-prettier(将 Prettier 作为 ESLint 规则运行)
npm install --save-dev eslint-plugin-prettier
2. 配置 ESLint

更新 .eslintrc.js

代码语言:javascript
复制
module.exports = {
  extends: [
    'eslint:recommended',
    '@typescript-eslint/recommended',
    'plugin:react/recommended',
    'plugin:prettier/recommended', // 必须放在最后
  ],
  
  plugins: [
    '@typescript-eslint',
    'react',
    'prettier'
  ],
  
  rules: {
    // Prettier 相关
    'prettier/prettier': 'error',
    
    // 禁用与 Prettier 冲突的规则
    'indent': 'off',
    'quotes': 'off',
    'semi': 'off',
    'comma-dangle': 'off',
    'max-len': 'off',
    
    // 保留非格式化相关的规则
    'no-console': 'warn',
    'no-debugger': 'error',
    'no-unused-vars': 'error'
  }
};
3. 统一配置文件

创建 prettier-eslint 配置:

代码语言:javascript
复制
// .eslintrc.js
module.exports = {
  extends: [
    'eslint:recommended',
    'prettier' // 禁用所有与 Prettier 冲突的规则
  ],
  plugins: ['prettier'],
  rules: {
    'prettier/prettier': [
      'error',
      {
        printWidth: 80,
        tabWidth: 2,
        useTabs: false,
        semi: true,
        singleQuote: true,
        trailingComma: 'es5',
        bracketSpacing: true,
        arrowParens: 'avoid'
      }
    ]
  }
};
工作流集成
1. Package.json 脚本
代码语言:javascript
复制
{
  "scripts": {
    "lint": "eslint src --ext .js,.jsx,.ts,.tsx",
    "lint:fix": "eslint src --ext .js,.jsx,.ts,.tsx --fix",
    "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"",
    "format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"",
    "code-check": "npm run lint && npm run format:check",
    "code-fix": "npm run lint:fix && npm run format"
  }
}
2. 自动化脚本

创建 scripts/code-quality.js

代码语言:javascript
复制
const { execSync } = require('child_process');
const chalk = require('chalk');

function runCommand(command, description) {
  console.log(chalk.blue(`🔍 ${description}...`));
  try {
    execSync(command, { stdio: 'inherit' });
    console.log(chalk.green(`✅ ${description} 完成`));
  } catch (error) {
    console.log(chalk.red(`❌ ${description} 失败`));
    process.exit(1);
  }
}

// 代码质量检查流程
console.log(chalk.yellow('🚀 开始代码质量检查...'));

runCommand('npm run lint', 'ESLint 检查');
runCommand('npm run format:check', 'Prettier 格式检查');
runCommand('npm run test', '单元测试');

console.log(chalk.green('🎉 所有检查通过!'));

团队协作最佳实践

Git Hooks 集成
1. 使用 Husky

安装和配置:

代码语言:javascript
复制
# 安装 husky
npm install --save-dev husky

# 安装 lint-staged
npm install --save-dev lint-staged

# 初始化 husky
npx husky install

# 添加 pre-commit hook
npx husky add .husky/pre-commit "npx lint-staged"

配置 package.json

代码语言:javascript
复制
{
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "eslint --fix",
      "prettier --write",
      "git add"
    ],
    "*.{json,css,md}": [
      "prettier --write",
      "git add"
    ]
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  }
}
2. 完整的 Git Hooks 配置

.husky/pre-commit

代码语言:javascript
复制
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

echo "🔍 Running pre-commit checks..."

# 运行 lint-staged
npx lint-staged

# 运行类型检查
npm run type-check

# 运行测试
npm run test:staged

echo "✅ Pre-commit checks passed!"

.husky/commit-msg

代码语言:javascript
复制
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

# 提交信息规范检查
npx commitlint --edit $1
CI/CD 集成
1. GitHub Actions 配置

创建 .github/workflows/code-quality.yml

代码语言:javascript
复制
name: Code Quality Check

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  code-quality:
    runs-on: ubuntu-latest
    
    strategy:
      matrix:
        node-version: [16.x, 18.x]
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v3
    
    - name: Setup Node.js
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    
    - name: Install dependencies
      run: npm ci
    
    - name: Run ESLint
      run: npm run lint
    
    - name: Check Prettier formatting
      run: npm run format:check
    
    - name: Run type check
      run: npm run type-check
    
    - name: Run tests
      run: npm run test:coverage
    
    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v3
      with:
        file: ./coverage/lcov.info
2. GitLab CI 配置

创建 .gitlab-ci.yml

代码语言:javascript
复制
stages:
  - quality
  - test
  - build

variables:
  NODE_VERSION: "18"

cache:
  paths:
    - node_modules/

before_script:
  - npm ci

lint:
  stage: quality
  script:
    - npm run lint
  only:
    - merge_requests
    - main

format-check:
  stage: quality
  script:
    - npm run format:check
  only:
    - merge_requests
    - main

type-check:
  stage: quality
  script:
    - npm run type-check
  only:
    - merge_requests
    - main

test:
  stage: test
  script:
    - npm run test:coverage
  coverage: '/Lines\s*:\s*(\d+\.\d+)%/'
  artifacts:
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura-coverage.xml
编辑器配置统一
1. EditorConfig

创建 .editorconfig

代码语言:javascript
复制
# EditorConfig is awesome: https://EditorConfig.org

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2

[*.{js,jsx,ts,tsx,vue}]
indent_size = 2

[*.{json,yml,yaml}]
indent_size = 2

[*.md]
trim_trailing_whitespace = false

[Makefile]
indent_style = tab
2. VS Code 工作区配置

创建 .vscode/settings.json

代码语言:javascript
复制
{
  "editor.formatOnSave": true,
  "editor.formatOnPaste": true,
  "editor.formatOnType": false,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true,
    "source.organizeImports": true
  },
  
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    "typescript",
    "typescriptreact",
    "vue"
  ],
  
  "typescript.preferences.importModuleSpecifier": "relative",
  "javascript.preferences.importModuleSpecifier": "relative",
  
  "files.associations": {
    "*.css": "css",
    "*.scss": "scss"
  },
  
  "emmet.includeLanguages": {
    "javascript": "javascriptreact",
    "typescript": "typescriptreact"
  }
}

创建 .vscode/extensions.json

代码语言:javascript
复制
{
  "recommendations": [
    "esbenp.prettier-vscode",
    "dbaeumer.vscode-eslint",
    "editorconfig.editorconfig",
    "bradlc.vscode-tailwindcss",
    "ms-vscode.vscode-typescript-next"
  ]
}

不同项目类型配置方案

React 项目配置
1. 依赖安装
代码语言:javascript
复制
npm install --save-dev \
  eslint \
  prettier \
  @typescript-eslint/parser \
  @typescript-eslint/eslint-plugin \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-jsx-a11y \
  eslint-config-prettier \
  eslint-plugin-prettier
2. ESLint 配置

.eslintrc.js

代码语言:javascript
复制
module.exports = {
  env: {
    browser: true,
    es2021: true,
    node: true
  },
  
  extends: [
    'eslint:recommended',
    '@typescript-eslint/recommended',
    'plugin:react/recommended',
    'plugin:react-hooks/recommended',
    'plugin:jsx-a11y/recommended',
    'prettier'
  ],
  
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaFeatures: {
      jsx: true
    },
    ecmaVersion: 'latest',
    sourceType: 'module'
  },
  
  plugins: [
    'react',
    'react-hooks',
    '@typescript-eslint',
    'jsx-a11y',
    'prettier'
  ],
  
  rules: {
    'prettier/prettier': 'error',
    
    // React 相关
    'react/react-in-jsx-scope': 'off', // React 17+
    'react/prop-types': 'off', // 使用 TypeScript
    'react/jsx-props-no-spreading': 'warn',
    'react/jsx-key': 'error',
    
    // React Hooks
    'react-hooks/rules-of-hooks': 'error',
    'react-hooks/exhaustive-deps': 'warn',
    
    // TypeScript
    '@typescript-eslint/no-unused-vars': 'error',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/no-explicit-any': 'warn',
    
    // 可访问性
    'jsx-a11y/anchor-is-valid': 'warn',
    'jsx-a11y/click-events-have-key-events': 'warn'
  },
  
  settings: {
    react: {
      version: 'detect'
    }
  }
};
3. Prettier 配置

.prettierrc.js

代码语言:javascript
复制
module.exports = {
  printWidth: 80,
  tabWidth: 2,
  useTabs: false,
  semi: true,
  singleQuote: true,
  quoteProps: 'as-needed',
  jsxSingleQuote: true,
  trailingComma: 'es5',
  bracketSpacing: true,
  jsxBracketSameLine: false,
  arrowParens: 'avoid',
  endOfLine: 'lf'
};
Vue 项目配置
1. 依赖安装
代码语言:javascript
复制
npm install --save-dev \
  eslint \
  prettier \
  @typescript-eslint/parser \
  @typescript-eslint/eslint-plugin \
  eslint-plugin-vue \
  @vue/eslint-config-typescript \
  @vue/eslint-config-prettier \
  eslint-config-prettier \
  eslint-plugin-prettier
2. ESLint 配置

.eslintrc.js

代码语言:javascript
复制
module.exports = {
  env: {
    browser: true,
    es2021: true,
    node: true
  },
  
  extends: [
    'eslint:recommended',
    '@typescript-eslint/recommended',
    'plugin:vue/vue3-recommended',
    '@vue/typescript/recommended',
    'prettier'
  ],
  
  parser: 'vue-eslint-parser',
  parserOptions: {
    parser: '@typescript-eslint/parser',
    ecmaVersion: 'latest',
    sourceType: 'module'
  },
  
  plugins: [
    'vue',
    '@typescript-eslint',
    'prettier'
  ],
  
  rules: {
    'prettier/prettier': 'error',
    
    // Vue 相关
    'vue/multi-word-component-names': 'off',
    'vue/no-v-html': 'warn',
    'vue/require-default-prop': 'error',
    'vue/require-prop-types': 'error',
    'vue/component-name-in-template-casing': ['error', 'PascalCase'],
    
    // TypeScript
    '@typescript-eslint/no-unused-vars': 'error',
    '@typescript-eslint/explicit-function-return-type': 'off'
  }
};
TypeScript 项目配置
1. 完整的 TypeScript 配置

.eslintrc.js

代码语言:javascript
复制
module.exports = {
  env: {
    browser: true,
    es2021: true,
    node: true
  },
  
  extends: [
    'eslint:recommended',
    '@typescript-eslint/recommended',
    '@typescript-eslint/recommended-requiring-type-checking',
    'prettier'
  ],
  
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    project: './tsconfig.json'
  },
  
  plugins: [
    '@typescript-eslint',
    'prettier'
  ],
  
  rules: {
    'prettier/prettier': 'error',
    
    // TypeScript 严格规则
    '@typescript-eslint/no-unused-vars': 'error',
    '@typescript-eslint/explicit-function-return-type': 'warn',
    '@typescript-eslint/no-explicit-any': 'error',
    '@typescript-eslint/no-unsafe-assignment': 'error',
    '@typescript-eslint/no-unsafe-call': 'error',
    '@typescript-eslint/no-unsafe-member-access': 'error',
    '@typescript-eslint/no-unsafe-return': 'error',
    
    // 命名规范
    '@typescript-eslint/naming-convention': [
      'error',
      {
        selector: 'interface',
        format: ['PascalCase'],
        prefix: ['I']
      },
      {
        selector: 'typeAlias',
        format: ['PascalCase']
      },
      {
        selector: 'enum',
        format: ['PascalCase']
      }
    ]
  }
};
Node.js 项目配置
1. 服务端配置

.eslintrc.js

代码语言:javascript
复制
module.exports = {
  env: {
    node: true,
    es2021: true
  },
  
  extends: [
    'eslint:recommended',
    '@typescript-eslint/recommended',
    'plugin:security/recommended',
    'prettier'
  ],
  
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module'
  },
  
  plugins: [
    '@typescript-eslint',
    'security',
    'prettier'
  ],
  
  rules: {
    'prettier/prettier': 'error',
    
    // Node.js 相关
    'no-console': 'off', // 服务端允许 console
    'no-process-exit': 'error',
    
    // 安全相关
    'security/detect-object-injection': 'warn',
    'security/detect-non-literal-fs-filename': 'warn',
    
    // TypeScript
    '@typescript-eslint/no-unused-vars': 'error',
    '@typescript-eslint/explicit-function-return-type': 'warn'
  }
};

常见问题和解决方案

问题 1:ESLint 和 Prettier 规则冲突

症状

代码语言:javascript
复制
error  Delete `⏎` prettier/prettier
error  Expected indentation of 2 spaces but found 4 indent

解决方案

  1. 确保安装了 eslint-config-prettier
  2. 在 ESLint 配置中正确使用:
代码语言:javascript
复制
module.exports = {
  extends: [
    'eslint:recommended',
    'prettier' // 必须放在最后
  ]
};
问题 2:编辑器格式化不一致

症状:团队成员保存文件时格式化结果不同

解决方案

  1. 统一编辑器配置:
代码语言:javascript
复制
// .vscode/settings.json
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "prettier.configPath": "./.prettierrc.js"
}
  1. 添加 EditorConfig:
代码语言:javascript
复制
# .editorconfig
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
问题 3:Git Hooks 不生效

症状:提交代码时没有触发代码检查

解决方案

  1. 检查 Husky 安装:
代码语言:javascript
复制
# 重新安装 husky
npm uninstall husky
npm install --save-dev husky
npx husky install
  1. 检查 hook 文件权限:
代码语言:javascript
复制
chmod +x .husky/pre-commit
  1. 验证 hook 配置:
代码语言:javascript
复制
# 测试 pre-commit hook
npx husky run pre-commit
问题 4:性能问题

症状:ESLint 检查速度很慢

解决方案

  1. 使用缓存:
代码语言:javascript
复制
{
  "scripts": {
    "lint": "eslint --cache --cache-location .eslintcache src"
  }
}
  1. 忽略不必要的文件:
代码语言:javascript
复制
// .eslintrc.js
module.exports = {
  ignorePatterns: [
    'dist/',
    'build/',
    'node_modules/',
    '*.min.js',
    'coverage/'
  ]
};
  1. 使用并行处理:
代码语言:javascript
复制
npm install --save-dev eslint-parallel
问题 5:TypeScript 项目配置问题

症状:TypeScript 文件 ESLint 检查报错

解决方案

  1. 确保正确的解析器配置:
代码语言:javascript
复制
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: './tsconfig.json',
    tsconfigRootDir: __dirname
  }
};
  1. 检查 tsconfig.json 包含路径:
代码语言:javascript
复制
{
  "include": [
    "src/**/*",
    "tests/**/*"
  ]
}
故障排除清单
🔍 诊断步骤
  1. 检查依赖版本
代码语言:javascript
复制
npm ls eslint prettier
  1. 验证配置文件
代码语言:javascript
复制
npx eslint --print-config src/index.js
  1. 测试规则
代码语言:javascript
复制
npx eslint --no-eslintrc --config .eslintrc.js src/
  1. 检查 Prettier 配置
代码语言:javascript
复制
npx prettier --check src/
🛠️ 常用调试命令
代码语言:javascript
复制
# 检查 ESLint 配置
npx eslint --debug src/

# 检查 Prettier 配置
npx prettier --check --debug-check src/

# 清除缓存
rm -rf .eslintcache
rm -rf node_modules/.cache

# 重新安装依赖
rm -rf node_modules package-lock.json
npm install

实际案例分享

案例 1:大型电商项目代码规范实施
项目背景
  • 团队规模:15+ 前端开发者
  • 技术栈:React + TypeScript + Next.js
  • 代码库:50+ 组件,200+ 页面
实施过程

第一阶段:基础配置

代码语言:javascript
复制
// .eslintrc.js - 初始配置
module.exports = {
  extends: [
    'eslint:recommended',
    '@typescript-eslint/recommended',
    'plugin:react/recommended',
    'plugin:react-hooks/recommended',
    'prettier'
  ],
  
  rules: {
    // 渐进式规则,从警告开始
    '@typescript-eslint/no-explicit-any': 'warn',
    'react/prop-types': 'off',
    'no-console': 'warn'
  }
};

第二阶段:严格化规则

代码语言:javascript
复制
// 3个月后升级配置
module.exports = {
  extends: [
    'eslint:recommended',
    '@typescript-eslint/recommended',
    '@typescript-eslint/recommended-requiring-type-checking',
    'plugin:react/recommended',
    'plugin:react-hooks/recommended',
    'plugin:jsx-a11y/recommended',
    'prettier'
  ],
  
  rules: {
    // 升级为错误级别
    '@typescript-eslint/no-explicit-any': 'error',
    '@typescript-eslint/explicit-function-return-type': 'warn',
    'react/jsx-key': 'error',
    'jsx-a11y/alt-text': 'error'
  }
};

效果统计

  • 代码审查时间减少 60%
  • Bug 率降低 45%
  • 新人上手时间缩短 40%
案例 2:开源组件库规范化
项目背景
  • 项目类型:Vue 3 组件库
  • 用户:1000+ 开发者
  • 组件数量:80+ 个组件
配置策略

严格的代码质量要求

代码语言:javascript
复制
// .eslintrc.js
module.exports = {
  extends: [
    'eslint:recommended',
    '@typescript-eslint/recommended',
    'plugin:vue/vue3-recommended',
    '@vue/typescript/recommended',
    'prettier'
  ],
  
  rules: {
    // 组件库特殊要求
    'vue/component-name-in-template-casing': ['error', 'PascalCase'],
    'vue/require-default-prop': 'error',
    'vue/require-prop-types': 'error',
    'vue/no-v-html': 'error', // 安全考虑
    
    // 文档要求
    'jsdoc/require-description': 'error',
    'jsdoc/require-param': 'error',
    'jsdoc/require-returns': 'error'
  }
};

自动化文档生成

代码语言:javascript
复制
{
  "scripts": {
    "docs:lint": "eslint docs --ext .js,.vue",
    "docs:format": "prettier --write docs/**/*.{js,vue,md}",
    "build:docs": "npm run docs:lint && npm run docs:format && vitepress build docs"
  }
}
案例 3:微前端架构规范统一
项目背景
  • 架构:微前端(qiankun)
  • 子应用:8个独立应用
  • 技术栈:React、Vue、Angular 混合
统一配置策略

基础配置包

代码语言:javascript
复制
// packages/eslint-config-micro-frontend/index.js
module.exports = {
  extends: [
    'eslint:recommended',
    'prettier'
  ],
  
  env: {
    browser: true,
    es2021: true
  },
  
  rules: {
    // 微前端特殊规则
    'no-undef': 'error', // 防止全局变量污染
    'no-implicit-globals': 'error',
    
    // 命名规范
    'camelcase': ['error', { 
      properties: 'never',
      ignoreGlobals: true 
    }]
  },
  
  overrides: [
    {
      files: ['**/*.react.{js,jsx,ts,tsx}'],
      extends: ['plugin:react/recommended']
    },
    {
      files: ['**/*.vue'],
      extends: ['plugin:vue/vue3-recommended']
    }
  ]
};

子应用配置

代码语言:javascript
复制
// 子应用 .eslintrc.js
module.exports = {
  extends: [
    '@company/eslint-config-micro-frontend',
    '@company/eslint-config-micro-frontend/react' // 或 vue
  ],
  
  rules: {
    // 子应用特定规则
  }
};
实施效果

量化指标

  • 配置统一率:100%
  • 代码风格一致性:95%+
  • 跨应用代码复用率:提升 30%

团队反馈

  • 开发体验显著提升
  • 代码审查效率提高
  • 新人培训成本降低
最佳实践总结
🎯 实施建议
  1. 渐进式推进
    • 从警告开始,逐步升级为错误
    • 先核心规则,再扩展规则
    • 给团队适应时间
  2. 工具链集成
    • 编辑器插件统一
    • Git hooks 强制执行
    • CI/CD 流程集成
  3. 团队培训
    • 规范文档编写
    • 最佳实践分享
    • 定期规范回顾
  4. 持续优化
    • 收集团队反馈
    • 定期更新规则
    • 性能监控优化
📊 成功指标
  • 代码质量:Bug 率下降 > 30%
  • 开发效率:代码审查时间减少 > 50%
  • 团队协作:代码风格统一率 > 95%
  • 维护成本:重构时间减少 > 40%

总结

ESLint + Prettier 的组合为前端项目提供了强大的代码质量保障。通过合理的配置和工作流集成,可以显著提升团队的开发效率和代码质量。

核心要点回顾
  1. 正确处理冲突:使用 eslint-config-prettier 避免规则冲突
  2. 渐进式实施:从警告开始,逐步严格化规则
  3. 工具链集成:编辑器、Git hooks、CI/CD 全流程覆盖
  4. 团队协作:统一配置,规范文档,持续优化
下一步行动
  1. 根据项目类型选择合适的配置方案
  2. 设置 Git hooks 和 CI/CD 集成
  3. 团队培训和规范推广
  4. 持续监控和优化

通过系统性的代码规范实施,您的团队将获得更高的开发效率、更好的代码质量和更愉快的协作体验。


本文档将持续更新,欢迎提供反馈和建议。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ESLint + Prettier 代码规范统一指南
    • 代码规范的重要性
      • 为什么需要代码规范?
    • ESLint 详细介绍
      • 什么是 ESLint?
      • 基础安装和配置
      • 高级配置选项
    • Prettier 详细介绍
      • 什么是 Prettier?
      • 基础安装和配置
      • 高级配置选项
    • ESLint + Prettier 集成配置
      • 解决冲突问题
      • 工作流集成
    • 团队协作最佳实践
      • Git Hooks 集成
      • CI/CD 集成
      • 编辑器配置统一
    • 不同项目类型配置方案
      • React 项目配置
      • Vue 项目配置
      • TypeScript 项目配置
      • Node.js 项目配置
    • 常见问题和解决方案
      • 问题 1:ESLint 和 Prettier 规则冲突
      • 问题 2:编辑器格式化不一致
      • 问题 3:Git Hooks 不生效
      • 问题 4:性能问题
      • 问题 5:TypeScript 项目配置问题
      • 故障排除清单
    • 实际案例分享
      • 案例 1:大型电商项目代码规范实施
      • 案例 2:开源组件库规范化
      • 案例 3:微前端架构规范统一
      • 最佳实践总结
    • 总结
      • 核心要点回顾
      • 下一步行动
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档