ESLint 配置文件 (.eslintrc.js) 完整指南
·
ESLint 配置文件 (.eslintrc.js) 完整指南
ESLint 是 JavaScript 和 TypeScript 的静态代码分析工具,用于识别和报告代码中的问题。以下是 .eslintrc.js 配置文件的完整指南。
基本配置文件结构
module.exports = {
// 配置基础
env: {
// 环境配置
},
extends: [
// 扩展配置
],
parser: "", // 解析器配置
parserOptions: {
// 解析器选项
},
plugins: [
// 插件列表
],
rules: {
// 规则配置
},
globals: {
// 全局变量
},
overrides: [
// 文件覆盖配置
],
settings: {
// 共享设置
}
};
完整配置示例
module.exports = {
// 指定 ESLint 的解析器
parser: "@typescript-eslint/parser",
// 指定解析器选项
parserOptions: {
ecmaVersion: 2020, // 使用的 ECMAScript 版本
sourceType: "module", // 模块类型: "script" 或 "module"
ecmaFeatures: {
jsx: true, // 启用 JSX
impliedStrict: true, // 启用严格模式
experimentalObjectRestSpread: true
},
project: "./tsconfig.json", // TypeScript 配置(如使用 TypeScript)
tsconfigRootDir: __dirname,
},
// 指定代码运行的环境
env: {
browser: true, // 浏览器全局变量
node: true, // Node.js 全局变量
es6: true, // 启用 ES6 特性
jest: true, // Jest 测试框架
mocha: true // Mocha 测试框架
},
// 扩展共享配置
extends: [
"eslint:recommended", // ESLint 推荐规则
"plugin:react/recommended", // React 推荐规则
"plugin:@typescript-eslint/recommended", // TypeScript 推荐规则
"plugin:prettier/recommended", // Prettier 集成
"airbnb", // Airbnb 风格指南
"airbnb/hooks" // React Hooks 规则
],
// 使用的插件
plugins: [
"react", // React 插件
"react-hooks", // React Hooks 插件
"@typescript-eslint", // TypeScript 插件
"import", // ES6 import/export 语法检查
"jsx-a11y", // 可访问性检查
"prettier" // Prettier 格式化
],
// 自定义规则
rules: {
// 错误级别:0 = off, 1 = warn, 2 = error
// 基本规则
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "error" : "off",
"no-unused-vars": "warn",
"no-undef": "error",
// 代码风格
"indent": ["error", 2], // 2 空格缩进
"quotes": ["error", "single"], // 单引号
"semi": ["error", "always"], // 分号
"comma-dangle": ["error", "always-multiline"], // 尾随逗号
// React 相关
"react/prop-types": "off", // 使用 TypeScript 时关闭
"react/react-in-jsx-scope": "off", // React 17+ 不需要导入 React
"react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx", ".tsx"] }],
// TypeScript 相关
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/no-explicit-any": "warn",
// Import 相关
"import/extensions": "off",
"import/prefer-default-export": "off",
// Prettier 集成
"prettier/prettier": "error"
},
// 全局变量
globals: {
React: "writable",
process: "readonly",
__dirname: "readonly",
__filename: "readonly"
},
// 文件特定配置
overrides: [
{
// TypeScript 文件
files: ["**/*.ts", "**/*.tsx"],
parser: "@typescript-eslint/parser",
extends: [
"plugin:@typescript-eslint/recommended"
],
rules: {
"@typescript-eslint/no-unused-vars": "error"
}
},
{
// 测试文件
files: ["**/__tests__/**/*", "**/*.{test,spec}.*"],
env: {
jest: true
},
rules: {
"no-console": "off"
}
},
{
// 配置文件
files: [".eslintrc.js", "webpack.config.js"],
env: {
node: true
},
rules: {
"@typescript-eslint/no-var-requires": "off"
}
}
],
// 共享设置
settings: {
react: {
version: "detect" // 自动检测 React 版本
},
"import/resolver": {
node: {
extensions: [".js", ".jsx", ".ts", ".tsx"],
paths: ["src"]
},
typescript: {
alwaysTryTypes: true
}
}
}
};
常用配置组合
React 项目配置
module.exports = {
env: {
browser: true,
es6: true,
},
extends: [
"eslint:recommended",
"plugin:react/recommended",
"plugin:react-hooks/recommended",
"plugin:jsx-a11y/recommended",
],
plugins: ["react", "react-hooks", "jsx-a11y"],
parserOptions: {
ecmaVersion: 2020,
sourceType: "module",
ecmaFeatures: {
jsx: true,
},
},
rules: {
"react/prop-types": "off",
"react/react-in-jsx-scope": "off",
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn",
},
settings: {
react: {
version: "detect",
},
},
};
TypeScript 项目配置
module.exports = {
parser: "@typescript-eslint/parser",
parserOptions: {
ecmaVersion: 2020,
sourceType: "module",
project: "./tsconfig.json",
},
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
],
plugins: ["@typescript-eslint"],
rules: {
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/no-explicit-any": "warn",
},
};
Node.js 项目配置
module.exports = {
env: {
node: true,
es6: true,
},
extends: ["eslint:recommended", "airbnb-base"],
parserOptions: {
ecmaVersion: 2020,
},
rules: {
"no-console": "off",
"import/no-unresolved": "error",
"consistent-return": "off",
},
};
Vue.js 项目配置
module.exports = {
env: {
browser: true,
es6: true,
},
extends: [
"eslint:recommended",
"plugin:vue/vue3-essential",
"@vue/typescript/recommended",
],
parser: "vue-eslint-parser",
parserOptions: {
parser: "@typescript-eslint/parser",
ecmaVersion: 2020,
sourceType: "module",
},
plugins: ["vue"],
rules: {
"vue/multi-word-component-names": "off",
"@typescript-eslint/no-explicit-any": "off",
},
};
常用规则分类
错误预防规则
rules: {
// 禁止使用 console
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
// 禁止使用 debugger
"no-debugger": process.env.NODE_ENV === "production" ? "error" : "off",
// 禁止未使用的变量
"no-unused-vars": ["error", { "args": "none" }],
// 禁止未声明的变量
"no-undef": "error",
// 禁止重复导入
"no-duplicate-imports": "error",
// 禁止在条件中使用赋值语句
"no-cond-assign": "error",
}
代码风格规则
rules: {
// 缩进
"indent": ["error", 2, { "SwitchCase": 1 }],
// 引号
"quotes": ["error", "single", { "avoidEscape": true }],
// 分号
"semi": ["error", "always"],
// 逗号风格
"comma-dangle": ["error", "always-multiline"],
// 对象字面量花括号风格
"object-curly-spacing": ["error", "always"],
// 数组括号风格
"array-bracket-spacing": ["error", "never"],
}
最佳实践规则
rules: {
// 使用 === 和 !==
"eqeqeq": ["error", "always"],
// 强制使用驼峰命名
"camelcase": ["error", { "properties": "never" }],
// 箭头函数括号
"arrow-parens": ["error", "as-needed"],
// 优先使用 const
"prefer-const": "error",
// 模板字符串
"prefer-template": "error",
}
与 Prettier 集成
module.exports = {
extends: [
"eslint:recommended",
"plugin:prettier/recommended" // 必须放在最后
],
rules: {
"prettier/prettier": "error"
}
};
需要安装:
npm install --save-dev eslint-config-prettier eslint-plugin-prettier
环境特定配置
开发环境配置
// .eslintrc.dev.js
module.exports = {
rules: {
"no-console": "off",
"no-debugger": "off",
"no-unused-vars": "warn"
}
};
生产环境配置
// .eslintrc.prod.js
module.exports = {
rules: {
"no-console": "error",
"no-debugger": "error",
"no-alert": "error"
}
};
忽略文件配置 (.eslintignore)
# 依赖目录
node_modules/
dist/
build/
# 配置文件
*.config.js
# 日志文件
*.log
# 环境文件
.env
.env.local
# IDE 文件
.vscode/
.idea/
# 操作系统文件
.DS_Store
Thumbs.db
包管理器脚本配置
在 package.json 中添加:
{
"scripts": {
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
"lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
"lint:watch": "eslint . --ext .js,.jsx,.ts,.tsx --watch"
}
}
这个完整的 ESLint 配置指南应该能帮助你为任何类型的 JavaScript/TypeScript 项目设置合适的代码检查规则。根据你的具体需求调整配置即可。
更多推荐

所有评论(0)