eslint-config-airbnb、eslint-config-google 和 eslint-config-standard 是 JavaScript 生态中最具代表性的三种代码规范配置包。eslint-config-airbnb 以严格著称,特别适合 React 项目,提供了详尽的规则覆盖;eslint-config-google 基于 Google JavaScript 风格指南,规则相对简洁,注重可读性;eslint-config-standard 则推崇“零配置”理念,强制使用无分号风格,强调约定优于配置。这三者分别代表了严格企业级规范、简洁通用规范以及社区约定规范三种不同的工程化哲学。
在构建现代 JavaScript 应用时,选择一套合适的 ESLint 配置方案往往比编写业务代码更早遇到。eslint-config-airbnb、eslint-config-google 和 eslint-config-standard 是生态中最具代表性的三个选择。它们不仅仅是规则集合,更代表了三种不同的工程哲学:严格管控、简洁实用和约定优先。让我们从实际开发场景出发,深入对比它们的差异。
eslint-config-airbnb 是三者中最严格的配置,它包含了大量的规则来约束代码的每一个角落。
propTypes 或使用 TypeScript。// .eslintrc.js for airbnb
module.exports = {
extends: ['airbnb'],
rules: {
// 即使你不想写 propTypes,Airbnb 默认也会强制要求
'react/prop-types': 'error'
}
};
eslint-config-google 的规则相对宽松,主要关注代码的可读性和基本结构。
// .eslintrc.js for google
module.exports = {
extends: ['google'],
rules: {
// Google 配置对缩进和引号有规定,但不会强制 React 特定规则
'indent': ['error', 2]
}
};
eslint-config-standard 强制执行 StandardJS 社区约定,最显著的特点是无分号风格。
// .eslintrc.js for standard
module.exports = {
extends: ['standard'],
rules: {
// Standard 强制无分号,如果你写了分号会报错
'semi': ['error', 'never']
}
};
eslint-config-airbnb 对 React 的支持是最完善的,它内置了 eslint-plugin-react 的大量规则。
// Airbnb: 自动包含 React 规则
// 组件未使用 props 会直接报错
function MyComponent({ unused }) {
return <div>Hello</div>; // Error: 'unused' is defined but never used
}
eslint-config-google 本质上是通用 JavaScript 规范,对 React 没有特殊照顾。
eslint-plugin-react。// Google: 需要手动扩展 React 支持
module.exports = {
extends: ['google', 'plugin:react/recommended'],
// 否则不会检查 JSX 特定问题
};
eslint-config-standard 同样专注于 JS 基础,对 React 支持需要额外引入 eslint-config-standard-react。
// Standard: 需要额外包支持 React
module.exports = {
extends: ['standard', 'standard-react']
// 基础包不包含 JSX 规则
};
eslint-config-airbnb 的安装和配置成本最高,因为它依赖大量的子包。
eslint-config-airbnb 以及所有相关的 peer dependencies。# Airbnb: 需要运行命令自动安装所有依赖
npx install-peerdeps --dev eslint-config-airbnb
eslint-config-google 的依赖非常少,安装过程简单直接。
# Google: 直接安装即可
npm install --save-dev eslint-config-google
eslint-config-standard 主打“零配置”,通常配合 standard 命令行工具使用。
.eslintrc 文件,直接运行 standard 命令即可。# Standard: 甚至不需要配置文件
npx standard
# 或者在 package.json 中添加 "standard" 字段
eslint-config-airbnb 与 Prettier 配合时需要小心处理规则冲突。
eslint-config-prettier 来关闭格式类规则。// Airbnb + Prettier: 必须关闭冲突规则
module.exports = {
extends: ['airbnb', 'prettier'],
// 否则 ESLint 和 Prettier 会打架
};
eslint-config-google 的规则相对较少,与 Prettier 的冲突点也较少。
// Google + Prettier: 冲突较少
module.exports = {
extends: ['google', 'prettier']
};
eslint-config-standard 本身包含大量格式规则(如缩进、分号),与 Prettier 存在天然冲突。
// Standard + Prettier: 不推荐混用
// Standard 强制无分号,Prettier 默认加分号,配置成本高
eslint-config-airbnb// 典型配置
module.exports = {
extends: ['airbnb', 'airbnb/hooks'],
env: { browser: true, node: true }
};
eslint-config-google// 典型配置
module.exports = {
extends: ['google'],
env: { node: true, es6: true }
};
eslint-config-standard// 典型配置 (package.json)
{
"standard": {
"globals": ["describe", "it"]
}
}
| 特性 | eslint-config-airbnb | eslint-config-google | eslint-config-standard |
|---|---|---|---|
| 核心理念 | 严格管控,安全第一 | 简洁实用,可读性优先 | 约定优先,零配置 |
| React 支持 | ⭐⭐⭐⭐⭐ 内置深度支持 | ⭐⭐ 需手动扩展 | ⭐⭐ 需额外插件 |
| 配置成本 | 🔴 高 (依赖多) | 🟢 低 (依赖少) | 🟢 极低 (可无配置) |
| 风格强制 | 可配置,但默认严格 | 适中,允许一定灵活性 | 🔴 极高 (如无分号) |
| Prettier 兼容 | 🟡 需配置 prettier | 🟢 较好兼容 | 🔴 天然冲突 |
| 适用场景 | 大型 React 团队项目 | 通用 JS/Node 项目 | 开源/快速启动项目 |
eslint-config-airbnb 就像一套精密的工业标准 🏭——虽然穿戴繁琐,但能最大程度保证生产安全。适合那些不能容忍代码风格不一致、且有专门基建团队维护配置的大型项目。
eslint-config-google 就像一套舒适的商务休闲装 👔——得体且不拘束,适合大多数日常开发场景。如果你不想在工具链上花费太多精力,它是最平衡的选择。
eslint-config-standard 就像一件印有社区 Logo 的 T 恤 👕——鲜明且有归属感,适合认同其文化的团队。但一旦你想修改它的样式(比如加分号),就会发现它并不如想象中那样灵活。
最终建议:不要盲目追随名气。如果你的项目重度依赖 React 且团队规模大,Airbnb 的严格是值得的;如果你追求开发体验和配置简单,Google 或 Standard 更能让你专注于代码本身。记住,最好的规范是团队愿意遵守的规范。
如果你希望团队快速上手一套简洁、清晰的代码规范,且项目不局限于 React 或特定的框架,eslint-config-google 是一个轻量级的选择。它基于 Google 的内部风格指南,规则数量适中,不会给开发者带来过重的心理负担,适合追求开发效率且希望保持代码整洁的通用 JavaScript 项目。但请注意,它对现代前端框架的特定支持不如 Airbnb 配置那样深入。
如果你的团队正在开发大型 React 应用,并且需要一套经过业界验证的、极其严格的代码规范来保证代码一致性,选择 eslint-config-airbnb 是最稳妥的方案。它虽然配置复杂且依赖众多,但能最大程度减少代码审查中的风格争论,适合对代码质量有极高要求的企业级项目。不过,你需要接受它对 JSX 和 ES6+ 特性的严格限制,并准备好处理较多的依赖冲突。
如果你厌倦了繁琐的配置文件,希望遵循社区广泛接受的“标准”风格(如无分号、单引号),eslint-config-standard 能让你实现真正的零配置启动。它非常适合开源项目或小型团队,能够迅速统一代码风格,减少关于格式的日常讨论。然而,一旦你的项目需要深度定制规则或与其他严格规范(如 Prettier)混用,可能会遇到较高的配置冲突成本。
ESLint shareable config for the Google JavaScript style guide (ES2015+ version)
$ npm install --save-dev eslint eslint-config-google
Once the eslint-config-google package is installed, you can use it by specifying google in the extends section of your ESLint configuration.
{
"extends": "google",
"rules": {
// Additional, per-project rules...
}
}
google config with eslint:recommendedThere are several rules in the eslint:recommended ruleset that Google style is not opinionated about that you might want to enforce in your project.
To use Google style in conjunction with ESLint's recommended rule set, extend them both, making sure to list google last:
{
"extends": ["eslint:recommended", "google"],
"rules": {
// Additional, per-project rules...
}
}
To see how the google config compares with eslint:recommended, refer to the source code of index.js, which lists every ESLint rule along with whether (and how) it is enforced by the google config.
Apache-2 © Google