Prettier+ESLint:为你的前端代码质量和格式化保驾护航

Prettier+ESLint:为你的前端代码质量和格式化保驾护航

Prettier + ESLint 组合是目前前端项目流行的代码格式化及代码质量保证工具,本文将介绍如何为你的项目配置这两个工具。

先来介绍 Prettier 工具的安装和配置。

配置 Prettier

先安装 Prettier 依赖:

npm install --save-dev --save-exact prettier

接下来就能使用 prettier 指令了:

npx prettier . --write

以上指令会检查当前目录及后代目录下的所有文件,并以原地修改文件的形式执行格式化。

.prettierrc.js 文件

不过我们通常还会创建配置文件,来自定义格式化规则。创建 .prettierrc.js 文件(以 CommonJS 为例):

// See https://prettier.io/docs/en/configuration

/** @type {import("prettier").Config} */
const config = {
  trailingComma"all",
  tabWidth4,
  semifalse,
  singleQuotetrue,
  printWidth120,
};

module.exports = config;

Prettier 配置文件支持很多种格式[1],可以参考这里。上述的配置是我的项目中用到的,遵循“单引号、无分号”的 Vue 代码风格,比较简洁。

.prettierignore 文件

当然,Prettier 官方还推荐我们使用配置文件 .prettierignore,用来忽略某些文件的格式化。

# 只是个 demo

# Ignore artifacts:
build
coverage
*.min.js

# Ignore all HTML files:
**/*.html

需要注意的是,node_modules**/.git 文件无需我们在 .prettierignore 文件中显式声明,这是 Prettier 开箱的配置[2]

配置 ESLint

有些前端项目会使用 ESLint 进行代码质量检查 + 代码格式化。不过由于 ESLint 本身的设计,只支持 JS 文件的代码格式化,不像 Prettier 那样强大。

由于 ESLint 和 Prettier 存在功能交集(代码格式化格式化这块),在项目引入 ESLint 做代码质量检查之后,需要再额外安装一个依赖 eslint-config-prettier[3],用来禁用 ESLint 中与 Prettier 相冲突的规则。

npm install --save-dev eslint eslint-config-prettier

接下来就能使用 eslint 指令了:

npx eslint .

.eslintrc.js 文件

使用 npm init @eslint/config 生成 .eslintrc.js 配置文件(CommonJS + JS + 不选预置规则),自定义检查规则:

module.exports = {
    env: {
        browsertrue,
        commonjstrue,
        es2021true,
        nodetrue,
    },
    extends'eslint:recommended',
    overrides: [
        {
            env: {
                nodetrue,
            },
            files: ['.eslintrc.{js,cjs}'],
            parserOptions: {
                sourceType'script',
            },
        },
    ],
    parserOptions: {
        ecmaVersion'latest',
    },
    rules: {},
}

修改 extends,添加 eslint-config-prettier 规则扩展,禁用掉 ESLint 中与 Prettier 相冲突的规则:

{
    extends: [
        'eslint:recommended',
        'prettier'
    ],
}

如此一来呢,ESLint 与 Prettier 就不会相互冲突了,各司其职:ESLint 负责代码质量检查(例如变量未声明、声明未使用等等),Prettier 负责代码格式化。

.eslintignore 文件

与 Prettier 类似,项目中还是推荐创建文件 .eslintignore 忽略部分文件的代码质量检查:

# 只是个 demo

build
*.min.js

需要注意的是,node_modules. 开头的文件(.git, .env 等)无需我们在 .eslintignore 文件中显式声明,这是 ESLint 开箱的配置[4]

提效工具:引入 lint-staged & husky

另外,我们还可以使用一个叫做 lint-staged 的工具,只针对 staged 阶段的文件运行 Linters。

npm install --save-dev lint-staged

配置 package.json 文件,增加 "lint-staged" 字段:

{
    "lint-staged": {
        "**/*""prettier --write --ignore-unknown",
        "**/*.{js.ts}""eslint --ext .ts,.js --fix"
    }
}

执行指令 npx lint-staged 就能针对 staged 阶段的文件进行 Linter 检查了,而且检查后变动的文件也会帮我们 git add!

需要注意的是:

  1. 我们无需为 prettier & eslint 指令指定目标地址(.),lint-staged 为我们指定好了(staged 阶段文件)
  2. lint-staged 默认是并行执行 “lint-staged” 字段中的指令的,"**/*""**/*.{js.ts}" 存在重叠,存在同一文件在同一时间被 ESLint 和 Prettier 同时处理的可能性,为此我们在执行 lint-staged 指令时需要携带 --concurrent false 参数,采用同步执行模式。

不过这样手动执行太过麻烦,因此 lint-staged 通常配合 husky 一起使用,在 pre-commit 阶段,做下 Linter 检查。

$ npm install husky --save-dev
$ npx husky install
husky - Git hooks installed
$ npm pkg set scripts.prepare="husky install"
$ npx husky add .husky/pre-commit "npx lint-staged --concurrent false"
husky - created .husky/pre-commit

如此一来,我们在每次 git commit 的时候,就会自动对 staged 阶段的文件进行 Linter 检查,再也不用手动执行 npx lint-staged

VS Code 编辑器支持

以上是在命令行层面完成了项目的 Prettier + ESLint 配置检查。不过,如果我们使用的 VS Code 编辑器,可以支持通过插件来使用项目中的 Prettier、ESLint 配置,让我们在编辑阶段就能完成代码格式化 + 代码质量检查。

首先安装 VS Code 插件:Prettier – Code formatter[5]ESLint[6]

安装好之后,打开文件,会在发生校验错误的地方看到红色(或其他颜色)的报错提示,但此时还无法实现自动保存修改。

打开 VS  Code 设置界面(JSON 格式):

  1. 先添加以下内容
{
  "editor.defaultFormatter""esbenp.prettier-vscode",
  "editor.formatOnSave"true,
}

我们将 VS  Code 默认的格式化工具设置成 Prettier。在保存文件时,就会自动格式化代码了。

另外,将保存时 ESLint 自动修复启用。

{
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
+ "editor.codeActionsOnSave": {
+   "source.fixAll": true
+ },
}

如此一来,自动格式化代码之前,还会对 JS 文件进行校验(插件默认支持这些文件的代码的检验 ["Javascript", "JavaScriptreact", "typescript", "typescriptreact", "html", "vue", "markdown"]),保证代码质量。

到这里,也就做完了 VS Code 编辑器上的配置。

References

[1]

支持很多种格式: https://prettier.io/docs/en/configuration#basic-configuration

[2]

Prettier 开箱的配置: https://prettier.io/docs/en/ignore#ignoring-files-prettierignore

[3]

eslint-config-prettier: https://github.com/prettier/eslint-config-prettier

[4]

ESLint 开箱的配置: https://eslint.org/docs/latest/use/configure/ignore#the-eslintignore-file

[5]

Prettier – Code formatter: https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode

[6]

ESLint: https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint


原文始发于微信公众号(写代码的宝哥):Prettier+ESLint:为你的前端代码质量和格式化保驾护航

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/243793.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!