解释 Vue 项目中的 Linting (ESLint) 和 Formatting (Prettier) 如何在多开发者协作中保持代码风格一致性。

各位靓仔靓女,晚上好!我是你们今晚的“代码造型师”——老码。今天咱们不聊框架源码,也不谈高深算法,就来唠唠嗑,聊聊在Vue项目里,怎么让一帮程序员像复制粘贴一样写出风格统一的代码。主题就是:Linting (ESLint) 和 Formatting (Prettier) 在多开发者协作中保持代码风格一致性的那些事儿。

一、代码风格统一的重要性:别让你的代码长得像隔壁老王

想象一下,一个项目里,有人喜欢用两个空格缩进,有人喜欢用四个;有人喜欢单引号,有人喜欢双引号;函数名一会儿驼峰一会儿下划线… 简直就是一场代码界的“群魔乱舞”。

为啥代码风格统一这么重要?

  • 可读性: 统一的风格让代码更容易阅读,就像看一本排版精美的书,而不是一堆乱码。想想你接手一个项目,代码风格和你的习惯完全不一样,是不是瞬间想原地爆炸?
  • 可维护性: 代码风格一致,意味着你更容易理解别人的代码,也更容易让别人理解你的代码。这在团队协作中简直是救命稻草。
  • 降低认知负担: 不需要花费额外的精力去适应不同的代码风格,可以更专注于业务逻辑。
  • 减少 Code Review 的阻力: Code Review 的时候,大家关注点应该在业务逻辑和代码质量上,而不是争论用单引号还是双引号。
  • 提高代码质量: 很多代码规范本身就是最佳实践,比如禁止使用 console.log,避免全局变量污染等等。

所以,代码风格统一,不仅仅是为了美观,更是为了提升团队效率和代码质量。

二、ESLint:代码界的“警察叔叔”

ESLint 是一个 JavaScript 代码检查工具,它可以帮助我们发现代码中的潜在问题,并强制执行代码风格规范。你可以把它想象成代码界的“警察叔叔”,时刻监督着你的代码,一旦发现违规行为,就会发出警告。

  1. 安装和配置 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']表示强制使用分号,并将其视为错误。
  2. 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,推荐使用 letconst
      • prefer-const:如果变量在初始化后不会被修改,推荐使用 const

    ESLint 规则的严重程度分为三种:

    • off0:禁用该规则。
    • warn1:启用该规则,但只给出警告。
    • error2:启用该规则,并将其视为错误。
  3. 在 Vue 项目中使用 ESLint

    要在 Vue 项目中使用 ESLint,需要在 package.json 文件中添加一个 script:

    {
       "scripts": {
           "lint": "eslint --ext .js,.vue src"
       }
    }

    然后,运行 npm run lintyarn lint 就可以检查你的代码了。ESLint 会扫描 src 目录下的所有 .js.vue 文件,并输出所有违反规则的地方。

    你还可以将 ESLint 集成到你的 IDE 中,比如 VS Code,这样就可以在编写代码的时候实时检查代码风格。

三、Prettier:代码界的“美容师”

Prettier 是一个代码格式化工具,它可以自动格式化你的代码,让你的代码看起来更漂亮。你可以把它想象成代码界的“美容师”,它会帮你整理代码的缩进、空格、换行等等,让你的代码看起来更整洁。

  1. 安装和配置 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 缩进。
  2. Prettier 规则详解

    Prettier 的规则相对简单,主要集中在代码格式化方面。常用的规则包括:

    • printWidth:每行代码的最大长度。
    • tabWidth:缩进使用的空格数。
    • useTabs:是否使用 tab 缩进。
    • semi:是否在语句末尾添加分号。
    • singleQuote:是否使用单引号。
    • quoteProps:对象属性的引号风格。
    • jsxSingleQuote:在 JSX 中是否使用单引号。
    • trailingComma:是否在对象或数组的最后一个元素后面添加逗号。
    • bracketSpacing:对象字面量的大括号内是否有空格。
    • jsxBracketSameLine:JSX 元素的闭合标签是否另起一行。
    • arrowParens:箭头函数参数周围是否需要括号。
    • rangeStart:格式化的起始位置。
    • rangeEnd:格式化的结束位置。
    • parser:指定代码解析器。
    • filepath:指定文件路径。
  3. 在 Vue 项目中使用 Prettier

    要在 Vue 项目中使用 Prettier,需要在 package.json 文件中添加一个 script:

    {
       "scripts": {
           "format": "prettier --write src/**/*.{js,vue}"
       }
    }

    然后,运行 npm run formatyarn format 就可以格式化你的代码了。Prettier 会扫描 src 目录下的所有 .js.vue 文件,并自动格式化它们。

    你还可以将 Prettier 集成到你的 IDE 中,比如 VS Code,这样就可以在保存文件的时候自动格式化代码。

四、ESLint 和 Prettier 的配合:强强联合,天下无敌

ESLint 和 Prettier 虽然都是代码检查工具,但它们的侧重点不同。ESLint 主要关注代码质量和潜在错误,而 Prettier 主要关注代码格式。

为了达到最佳效果,我们通常会将 ESLint 和 Prettier 配合使用。

  1. 安装相关依赖

    首先,安装 eslint-plugin-prettiereslint-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 规则。
  2. 配置 ESLint

    在你的 .eslintrc.js 文件中,添加 eslint-plugin-prettiereslint-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 数组的最后,这样可以覆盖其他的配置。

  3. 配置 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 工具。

  1. 版本控制(Git Hooks)

    可以使用 Git Hooks 在提交代码之前自动检查代码风格。常用的 Git Hooks 包括:

    • pre-commit:在提交代码之前执行。
    • pre-push:在推送代码之前执行。

    可以使用 huskylint-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 文件。如果代码风格不符合规范,提交会被阻止。

  2. 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,配置 envextendsparserOptionsrules 等。常用的规则包括 no-consoleno-debuggereqeqeqindentquotessemi 等。
Prettier 代码格式化,美化代码 .prettierrc.js,配置 printWidthtabWidthuseTabssemisingleQuotetrailingComma 等。
配合使用 ESLint + Prettier 安装 eslint-plugin-prettiereslint-config-prettier,在 .eslintrc.js 中添加 plugin:prettier/recommended。配置 VS Code,让 Prettier 使用 ESLint 的配置。
版本控制 Git Hooks (husky + lint-staged) package.json 中配置 huskylint-staged,在提交代码之前自动格式化和检查代码。
CI/CD 持续集成/持续部署 在 CI/CD 流程中添加代码检查环节,确保只有符合代码规范的代码才能被部署到生产环境。

好了,今天的分享就到这里。希望对大家有所帮助。如果有什么问题,欢迎提问。下次再见!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注