各位靓仔靓女,晚上好!我是你们今晚的“代码造型师”——老码。今天咱们不聊框架源码,也不谈高深算法,就来唠唠嗑,聊聊在Vue项目里,怎么让一帮程序员像复制粘贴一样写出风格统一的代码。主题就是:Linting (ESLint) 和 Formatting (Prettier) 在多开发者协作中保持代码风格一致性的那些事儿。
一、代码风格统一的重要性:别让你的代码长得像隔壁老王
想象一下,一个项目里,有人喜欢用两个空格缩进,有人喜欢用四个;有人喜欢单引号,有人喜欢双引号;函数名一会儿驼峰一会儿下划线… 简直就是一场代码界的“群魔乱舞”。
为啥代码风格统一这么重要?
- 可读性: 统一的风格让代码更容易阅读,就像看一本排版精美的书,而不是一堆乱码。想想你接手一个项目,代码风格和你的习惯完全不一样,是不是瞬间想原地爆炸?
- 可维护性: 代码风格一致,意味着你更容易理解别人的代码,也更容易让别人理解你的代码。这在团队协作中简直是救命稻草。
- 降低认知负担: 不需要花费额外的精力去适应不同的代码风格,可以更专注于业务逻辑。
- 减少 Code Review 的阻力: Code Review 的时候,大家关注点应该在业务逻辑和代码质量上,而不是争论用单引号还是双引号。
- 提高代码质量: 很多代码规范本身就是最佳实践,比如禁止使用
console.log
,避免全局变量污染等等。
所以,代码风格统一,不仅仅是为了美观,更是为了提升团队效率和代码质量。
二、ESLint:代码界的“警察叔叔”
ESLint 是一个 JavaScript 代码检查工具,它可以帮助我们发现代码中的潜在问题,并强制执行代码风格规范。你可以把它想象成代码界的“警察叔叔”,时刻监督着你的代码,一旦发现违规行为,就会发出警告。
-
安装和配置 ESLint
首先,在你的 Vue 项目中安装 ESLint:
npm install eslint --save-dev
或者使用 Yarn:
yarn add eslint --dev
然后,初始化 ESLint 配置:
npx eslint --init
这个命令会引导你生成一个
.eslintrc.js
(或者.eslintrc.json
,.eslintrc.yaml
等) 配置文件。你可以根据自己的需求选择不同的配置,比如:- 选择你要检查的代码类型: JavaScript modules (import/export)
- 选择你的框架: Vue.js
- 选择你的代码运行环境: Browser, Node.js
- 选择你喜欢的风格指南: Airbnb, Standard, Google
一个典型的
.eslintrc.js
文件可能长这样:module.exports = { root: true, env: { node: true }, extends: [ 'plugin:vue/essential', '@vue/standard' ], parserOptions: { parser: 'babel-eslint' }, rules: { 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'semi': ['error', 'always'], // 强制使用分号 'quotes': ['error', 'single'], // 强制使用单引号 'no-unused-vars': 'warn' // 未使用的变量给出警告 } };
root: true
:表示这是根配置文件,ESLint 会从这里开始查找配置。env
:指定代码运行的环境,ESLint 会根据环境启用相应的全局变量。extends
:继承现有的 ESLint 配置,比如plugin:vue/essential
是 Vue 官方推荐的基本配置,@vue/standard
是 Standard JavaScript 风格指南。parserOptions
:指定代码解析器,babel-eslint
可以解析 ES6+ 语法。rules
:自定义规则,可以覆盖继承的配置。'no-console': 'warn'
表示在生产环境下禁止使用console.log
,但给出警告。'no-debugger': 'off'
表示禁用 debugger 语句。'semi': ['error', 'always']
表示强制使用分号,并将其视为错误。
-
ESLint 规则详解
ESLint 提供了非常丰富的规则,可以控制代码的方方面面。常用的规则包括:
- Possible Errors: 检查可能导致错误的语法。
no-console
:禁止使用console.log
。no-debugger
:禁止使用debugger
语句。no-dupe-args
:禁止函数参数重名。no-empty
:禁止空的块语句。
- Best Practices: 推荐的最佳实践。
eqeqeq
:强制使用===
和!==
,而不是==
和!=
。no-eval
:禁止使用eval()
。no-return-assign
:禁止在return
语句中使用赋值语句。
- Stylistic Issues: 代码风格相关的规则。
indent
:强制使用一致的缩进。quotes
:强制使用一致的引号。semi
:强制使用一致的分号。comma-dangle
:强制在多行结构中,最后一个元素后面加上逗号。key-spacing
: 强制对象字面量属性中 key 和 value 之间有空格。
- ECMAScript 6: ES6+ 相关的规则。
arrow-spacing
:强制箭头函数的箭头前后有空格。no-var
:禁止使用var
,推荐使用let
和const
。prefer-const
:如果变量在初始化后不会被修改,推荐使用const
。
ESLint 规则的严重程度分为三种:
off
或0
:禁用该规则。warn
或1
:启用该规则,但只给出警告。error
或2
:启用该规则,并将其视为错误。
- Possible Errors: 检查可能导致错误的语法。
-
在 Vue 项目中使用 ESLint
要在 Vue 项目中使用 ESLint,需要在
package.json
文件中添加一个 script:{ "scripts": { "lint": "eslint --ext .js,.vue src" } }
然后,运行
npm run lint
或yarn lint
就可以检查你的代码了。ESLint 会扫描src
目录下的所有.js
和.vue
文件,并输出所有违反规则的地方。你还可以将 ESLint 集成到你的 IDE 中,比如 VS Code,这样就可以在编写代码的时候实时检查代码风格。
三、Prettier:代码界的“美容师”
Prettier 是一个代码格式化工具,它可以自动格式化你的代码,让你的代码看起来更漂亮。你可以把它想象成代码界的“美容师”,它会帮你整理代码的缩进、空格、换行等等,让你的代码看起来更整洁。
-
安装和配置 Prettier
首先,在你的 Vue 项目中安装 Prettier:
npm install prettier --save-dev
或者使用 Yarn:
yarn add prettier --dev
然后,创建一个
.prettierrc.js
(或者.prettierrc.json
,.prettierrc.yaml
等) 配置文件:module.exports = { semi: true, // 强制使用分号 singleQuote: true, // 强制使用单引号 trailingComma: 'es5', // 在 ES5 中有效的尾随逗号 printWidth: 100, // 每行最大长度 tabWidth: 4, // 使用 tab 缩进 useTabs: false, // 不使用 tab };
semi
:是否在语句末尾添加分号。singleQuote
:是否使用单引号。trailingComma
:是否在对象或数组的最后一个元素后面添加逗号。printWidth
:每行代码的最大长度。tabWidth
:缩进使用的空格数。useTabs
:是否使用 tab 缩进。
-
Prettier 规则详解
Prettier 的规则相对简单,主要集中在代码格式化方面。常用的规则包括:
printWidth
:每行代码的最大长度。tabWidth
:缩进使用的空格数。useTabs
:是否使用 tab 缩进。semi
:是否在语句末尾添加分号。singleQuote
:是否使用单引号。quoteProps
:对象属性的引号风格。jsxSingleQuote
:在 JSX 中是否使用单引号。trailingComma
:是否在对象或数组的最后一个元素后面添加逗号。bracketSpacing
:对象字面量的大括号内是否有空格。jsxBracketSameLine
:JSX 元素的闭合标签是否另起一行。arrowParens
:箭头函数参数周围是否需要括号。rangeStart
:格式化的起始位置。rangeEnd
:格式化的结束位置。parser
:指定代码解析器。filepath
:指定文件路径。
-
在 Vue 项目中使用 Prettier
要在 Vue 项目中使用 Prettier,需要在
package.json
文件中添加一个 script:{ "scripts": { "format": "prettier --write src/**/*.{js,vue}" } }
然后,运行
npm run format
或yarn format
就可以格式化你的代码了。Prettier 会扫描src
目录下的所有.js
和.vue
文件,并自动格式化它们。你还可以将 Prettier 集成到你的 IDE 中,比如 VS Code,这样就可以在保存文件的时候自动格式化代码。
四、ESLint 和 Prettier 的配合:强强联合,天下无敌
ESLint 和 Prettier 虽然都是代码检查工具,但它们的侧重点不同。ESLint 主要关注代码质量和潜在错误,而 Prettier 主要关注代码格式。
为了达到最佳效果,我们通常会将 ESLint 和 Prettier 配合使用。
-
安装相关依赖
首先,安装
eslint-plugin-prettier
和eslint-config-prettier
:npm install eslint-plugin-prettier eslint-config-prettier --save-dev
或者使用 Yarn:
yarn add eslint-plugin-prettier eslint-config-prettier --dev
eslint-plugin-prettier
:将 Prettier 集成到 ESLint 中,让 ESLint 可以使用 Prettier 的规则。eslint-config-prettier
:禁用所有可能与 Prettier 冲突的 ESLint 规则。
-
配置 ESLint
在你的
.eslintrc.js
文件中,添加eslint-plugin-prettier
和eslint-config-prettier
:module.exports = { root: true, env: { node: true }, extends: [ 'plugin:vue/essential', '@vue/standard', 'plugin:prettier/recommended' // 添加这一行 ], parserOptions: { parser: 'babel-eslint' }, rules: { 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'semi': ['error', 'always'], // 强制使用分号 'quotes': ['error', 'single'], // 强制使用单引号 'no-unused-vars': 'warn' // 未使用的变量给出警告 } };
确保
plugin:prettier/recommended
放在extends
数组的最后,这样可以覆盖其他的配置。 -
配置 VS Code
为了更方便的使用 ESLint 和 Prettier ,你可以在 VS Code 中安装 ESLint 和 Prettier 插件。然后在 VS Code 的设置中进行如下配置:
{ "editor.formatOnSave": true, // 保存时自动格式化 "editor.defaultFormatter": "esbenp.prettier-vscode", // 指定默认的格式化工具为 Prettier "eslint.validate": [ "javascript", "javascriptreact", "vue" ], "prettier.eslintIntegration": true, // 让 Prettier 使用 ESLint 的配置 "files.eol": "n" //设置换行符,解决不同系统换行符不一致的问题。 }
这样,在保存文件的时候,VS Code 会先使用 Prettier 格式化代码,然后再使用 ESLint 检查代码。如果有错误,ESLint 会在编辑器中显示出来。
五、版本控制和 CI/CD:双保险,确保代码风格一致
即使有了 ESLint 和 Prettier,也不能保证所有开发者都自觉遵守代码规范。为了确保代码风格一致,我们还需要借助版本控制和 CI/CD 工具。
-
版本控制(Git Hooks)
可以使用 Git Hooks 在提交代码之前自动检查代码风格。常用的 Git Hooks 包括:
pre-commit
:在提交代码之前执行。pre-push
:在推送代码之前执行。
可以使用
husky
和lint-staged
来管理 Git Hooks:npm install husky lint-staged --save-dev
或者使用 Yarn:
yarn add husky lint-staged --dev
然后在
package.json
文件中添加配置:{ "husky": { "hooks": { "pre-commit": "lint-staged" } }, "lint-staged": { "src/**/*.{js,vue}": [ "prettier --write", "eslint --fix", "git add" ] } }
这样,在提交代码之前,
lint-staged
会自动格式化和检查所有修改过的.js
和.vue
文件。如果代码风格不符合规范,提交会被阻止。 -
CI/CD(持续集成/持续部署)
可以在 CI/CD 流程中添加代码检查环节,确保只有符合代码规范的代码才能被部署到生产环境。常用的 CI/CD 工具包括:
- Jenkins
- Travis CI
- CircleCI
- GitHub Actions
以 GitHub Actions 为例,可以在
.github/workflows
目录下创建一个main.yml
文件:name: CI on: push: branches: [main] pull_request: branches: [main] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Use Node.js 14.x uses: actions/setup-node@v2 with: node-version: 14.x - name: Install dependencies run: npm install - name: Lint run: npm run lint - name: Build run: npm run build
这样,每次有代码推送到
main
分支或者有 Pull Request 提交到main
分支时,GitHub Actions 都会自动运行 ESLint 检查代码。如果代码风格不符合规范,构建会失败。
六、总结:代码风格统一,从我做起,从现在做起
今天我们聊了 ESLint 和 Prettier 在 Vue 项目中保持代码风格一致性的那些事儿。总结一下:
- 代码风格统一非常重要,可以提高代码的可读性、可维护性和团队效率。
- ESLint 是代码界的“警察叔叔”,可以检查代码中的潜在问题,并强制执行代码风格规范。
- Prettier 是代码界的“美容师”,可以自动格式化你的代码,让你的代码看起来更漂亮。
- ESLint 和 Prettier 可以配合使用,达到最佳效果。
- 可以使用 Git Hooks 和 CI/CD 工具来确保代码风格一致。
最后,我想说的是,代码风格统一,不仅仅是团队的事情,也是每个程序员的责任。从我做起,从现在做起,让我们一起写出更漂亮、更规范的代码!
为了方便大家记忆,我把今天的内容总结成一张表格:
工具 | 作用 | 配置 |
---|---|---|
ESLint | 代码检查,规范代码风格 | .eslintrc.js ,配置 env 、extends 、parserOptions 、rules 等。常用的规则包括 no-console 、no-debugger 、eqeqeq 、indent 、quotes 、semi 等。 |
Prettier | 代码格式化,美化代码 | .prettierrc.js ,配置 printWidth 、tabWidth 、useTabs 、semi 、singleQuote 、trailingComma 等。 |
配合使用 | ESLint + Prettier | 安装 eslint-plugin-prettier 和 eslint-config-prettier ,在 .eslintrc.js 中添加 plugin:prettier/recommended 。配置 VS Code,让 Prettier 使用 ESLint 的配置。 |
版本控制 | Git Hooks (husky + lint-staged) | 在 package.json 中配置 husky 和 lint-staged ,在提交代码之前自动格式化和检查代码。 |
CI/CD | 持续集成/持续部署 | 在 CI/CD 流程中添加代码检查环节,确保只有符合代码规范的代码才能被部署到生产环境。 |
好了,今天的分享就到这里。希望对大家有所帮助。如果有什么问题,欢迎提问。下次再见!