Eslint、Prettier搭配使用

1. 基本介绍

ESLint(包括其他一些 lint 工具)的主要功能包含代码格式和代码质量的校验。

Prettier 是一款代码格式化工具,用于检测代码中的格式问题,比如单行代码长度、tab长度、空格、逗号表达式等。在功能职责上,ESlint 偏向于把控项目的代码质量,而 Prettier 更偏向于统一项目的编码风格。

在 ESlint 推出 --fix 参数前,ESLint 并没有自动化格式代码的功能,要对一些格式问题做批量格式化只能用 Prettier 这样的工具。并且,Prettier 在代码风格的检测上比 ESlint 更全面,所以两者通常是结合在一起使用的。

2. 基本使用步骤

2.1 在vscode编辑器中安装eslint和prettier插件

  1. vscode插件的作用
    vscode中安装插件后,如果项目根目录下有 .eslintrc.js.prettierrc 配置文件,VSCode 插件会自动读取配置文件中的配置检查你的代码和格式化文件。
  2. 配置settings.json,开启eslint插件功能,开启保存时执行eslint的fix功能。
"editor.codeActionsOnSave": {
   "source.fixAll.eslint": true
 },
 "eslint.enable": true, // eslint生效
 "eslint.options": {
   // 执行eslint命令的时候有效
   "extensions": [".js", ".vue", ".ts", ".tsx"]
 },
 "editor.formatOnSave": true,
 "eslint.validate": [
   // eslint检查的语言
   "javascript",
   "javascriptreact",
   {
     "language": "html",
     "autoFix": true
   },
   {
     "language": "vue",
     "autoFix": true
   },
   {
     "language": "typescript",
     "autoFix": true
   },
   {
     "language": "typescriptreact",
     "autoFix": true
   }
 ],
 "eslint.trace.server": "verbose",

2.2 初始化一个项目

# 直接利用cra初始化一个项目
yarn create create-react-app my-app --template typescript

2.3 配置

  1. 如果希望使用eslint对代码质量进行检查,首先需要安装eslint包
yarn add eslint --dev

生成配置文件.eslintrc.js,如果没有配置该文件,那么在vscode的输出面板中可以看到报错。

./node_modules/.bin/eslint --init

创建.eslintignore文件

build
output
node_modules
src/idl
lib
.temp/
mock.js
.eslintrc.js
idl/
  1. 需要用prettier对代码的格式进行检查和修正,下载prettier包
yarn add prettier --dev

生成配置文件.prettier.js

module.exports = {
    semi: true,
    trailingComma: "all",
    singleQuote: true,
    jsxSingleQuote: false,
    printWidth: 120,
    tabWidth: 2,
    useTabs: false,
    arrowParens: "avoid",
    endOfLine: "auto",
  };
  1. 下载一些会用到的eslint 插件
    eslint-plugin-react : React的lint规则
    eslint-config-prettier:关闭不必要的或者可能和Prettier冲突的规则
    eslint-plugin-prettier
    @typescript-eslint:typescript-eslint enables ESLint to run on TypeScript code.
yarn add @typescript-eslint eslint-plugin-react eslint-config-prettier eslint-plugin-prettier --dev
  1. 简单配置下.eslintrc.js文件
module.exports = {
    extends: [
      'eslint:recommended',  // 继承eslint官方推荐的一些配置
      'plugin:@typescript-eslint/recommended', // 继承了一个由typesript官方提供的适合于ts代码检查的配置
      "plugin:react/recommended", // 继承了一个由react官方提供的适合于ts代码检查的配置
      "prettier" // 由于eslint和prettier都具备代码格式化的功能,并且可能出现冲突,所以继承eslint-config-prettier提供的配置,将eslint中冲突的配置项关闭了
    ],
    parser: '@typescript-eslint/parser', // eslint默认的parser只能解析js,所以配置了parser
    plugins: [
      'prettier' // 注册eslint-plugin-prettier插件
    ],
    parserOptions: { // 对parser进行配置
        warnOnUnsupportedTypeScriptVersion: false,
        ecmaFeatures: {
          jsx: true,
        },
        ecmaVersion: 12,
        sourceType: 'module',
      },
      rules: {
        // 开启eslint-plugin-prettier中的prettier规则
        // 开启这条规则后,会将prettier的校验规则传递给eslint,这样eslint就可以按照prettier的方式来进行代码格式的校验
        "prettier/prettier": "error" 
      }
}

使用

在这里插入图片描述

3. Eslint配置文件

3.1 plugins

3.1.1 原理

Eslint中plugins和extends的区别
eslint通过配置多条rules来执行lint校验。比如下面配置了一条eslint规则

//	.eslintrc.js
module.exports = {
	rules: {
    'quotes': 'error' // 字符串必须使用双引号,否则报错
  }
}

对于一些特性的场景,eslint默认提供的rules可能不能满足需求,此时可通过配置plugin插件来扩展可用的规则。比如插件eslint-plugin-react中实现了一些react项目中需要的校验规则。

//	eslint-plugin-react
module.exports = {
  rules: {
    'jsx-boolean-value': {
      meta: {
        docs: {
          description: 'Enforce boolean attributes notation in JSX',
          category: 'Stylistic Issues',
          recommended: false,
          url: docsUrl('jsx-boolean-value')
        },
        fixable: 'code'
      },
      create(context) {}
    }
    // ...
  },
}

那插件中新增的规则,如何应用的自己的项目呢?

  1. 安装插件
    yarn add eslint-plugin-react --dev
    
  2. 加载插件
    //	.eslintrc.js
    module.exports = {
      plugins: [
        'eslint-plugin-react' // 加载插件
      ],
      rules: {
        'eslint-plugin-react/jsx-boolean-value': 2 // 开启插件中的特定规则
       }
    }
    
  3. 开启规则

3.2 extends

3.2.1 原理

Eslint中plugins和extends的区别
上面plugins和rules的结合能解决扩展规则的问题,但是一条一条的开启规则的过程并不友好,extends提供了集成的配置方案。

以上述的eslint-plugin-react为例,它实现了多种配置规则,为了方便其他人使用,它默认实现了两种最佳实践all以及recommened(在configs中可以看到具体的名称)
在这里插入图片描述
通过extends可以直接继承配置好的最佳实践。

module.export = {
	extends: [
    	'eslint-plugin-react/recommended'
    ]
}

3.2.2 extends的写法

ESLint 之解析包名

  1. eslint: 开头,加载 ESLint 内置规则

    如果是 eslint:recommended,加载 ESLint 推荐的规则;
    如果是 eslint:all,加载 ESLint 所有的规则;

  2. 以 plugin: 开头

  • 首先分离出 pluginName,它就是 plugin: 和最后一个 / 的之间部分;有如下几种情况:

    plugin:@typescript-eslint/recommended 的 pluginName 是 @typescript-eslint
    plugin:@typescript-eslint/eslint-plugin/recommended 的 pluginName 是 @typescript-eslint/eslint-plugin
    plugin:@typescript-eslint/test/recommended 的 pluginName 是 @typescript-eslint/test
    plugin:@typescript-eslint/eslint-plugin-irene/recommended 的 pluginName 是 @typescript-eslint/eslint-plugin-irene
    plugin:prettier/recommended 的 pluginName 是 prettier

  • 然后根据 pluginName 得到标准化的包名;

    • 如果 pluginName 以 @ 开头,说明使用的是 scoped modules;有如下几种情况:

      pluginName 是 @scopeName@scopeName/eslint-plugin,对应的包名是 @scopeName/eslint-plugin

      @typescript-eslint 对应的是 @typescript-eslint/eslint-plugin
      @typescript-eslint/eslint-plugin 对应的是 @typescript-eslint/eslint-plugin

      pluginName 是 @scopeName/xxx,且 xxx 不以 eslint-plugin 开头,对应的包名是 @scopeName/eslint-plugin-xxx

      @typescript-eslint/test 对应的是 @typescript-eslint/eslint-plugin-test

      pluginName 是 @scopeName/eslint-plugin-xxx,对应的包名是 @scopeName/eslint-plugin-xxx

      @typescript-eslint/eslint-plugin-irene 对应的是 @typescript-eslint/eslint-plugin-irene

    • 如果 pluginName 不以 eslint-plugin- 开头,对应的包名是 eslint-plugin-xxx;例如:prettier 对应的是 eslint-plugin-prettier;

  1. 其他

4. 插件的使用

4.1 解决eslint和prettier规则冲突的问题

ESLint 之与 Prettier 配合使用

  1. 冲突问题
    假如这样一行代码 const a = "irene",用 Prettier 格式化后变成了 const a = 'irene',再用 ESLint 去检测,就会报 Strings must use doublequote;当你用 eslint --fix 自动修复这个问题后又无法通过 Prettier 的校验,结果陷入死循环。

  2. 解决方案
    思路:禁掉 ESLint 中与 Prettier 冲突的规则,然后使用 Prettier 做格式化, ESLint 做代码校验。

    社区提出了这样一种解决方案:
    目的:使用 eslint --fix 就能完成格式化和校验的工作,格式化使用 Prettier,代码校验使用 ESLint。

    具体步骤:

    首先禁掉 ESLint/插件 中与 Prettier 冲突的规则,创建一个包 eslint-config-prettier,里面定义了被禁掉的 ESLint/插件 规则。(这个包中值是禁用了一些规则,没有新增规则。https://github.com/prettier/eslint-config-prettier/blob/main/index.js

    创建一个插件 eslint-plugin-prettier,定义一条规则 prettier/prettier,调用 Prettier,配合 ESLint 实现运行 eslint --fix 按 Prettier 规则自动格式化代码。

    {
      extends: [
        ..., // 其他
        "prettier", // eslint-config-prettier
      ]
      plugins: ["prettier"], // 注册eslint-plugin-prettier
      rules: {
        "prettier/prettier": "error" // 开启规则
      }
    }
    
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VSCode是一款流行的代码编辑器,可以通过安装插件来集成ESLintPrettierESLint是一款JavaScript代码检查工具,可以帮助开发者发现代码中的错误和潜在问题。Prettier是一款代码格式化工具,可以自动格式化代码,使其更易于阅读和维护。配置ESLintPrettier可以帮助开发者在编写代码时更加高效和准确。 ### 回答2: 近年来,前端工具生态系统飞快的发展,其中强化代码风格和静态代码质量的工具是越来越重要的,而比较流行和实用的两个工具是ESLintPrettier,它们都被广泛应用于JavaScript和TypeScript项目中。 VS Code是一款流行的编辑器,它与ESLintPrettier紧密集成,并允许我们在编辑器中对它们进行配置。这个配置可以让我们轻松地实现自动修复代码风格和语法错误,并确保格式一致性,从而提高代码质量和可读性。 首先,我们需要在项目中安装ESLintPrettier。我们可以在 package.json 中的 devDependencies 中添加以下两个依赖: ``` "eslint": "^7.31.0", "prettier": "^2.4.1" ``` 接下来,我们需要安装两个 VS Code 扩展程序进行配置: - ESLint扩展程序:https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint - Prettier扩展程序:https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode 当完成上述操作后,我们可以在 VS Code 中的设置中打开 ESLint 配置,通过以下方式启用 ESLint: ``` { "editor.formatOnSave": false, "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, "eslint.validate": [ "javascript", "javascriptreact", "typescript", "typescriptreact" ] } ``` 这个配置的意义是,当保存文件时,自动修复 ESLint 指出的错误和警告,同时,在实时代码检查时支持 JavaScript 和 TypeScript 语言和相关的文件扩展。 接下来,我们可以配置 Prettier 执行格式化操作。为了让 PrettierESLint 集成,我们可以添加一个 `.prettierrc` 文件到项目的根目录下: ``` { "singleQuote": true, "trailingComma": "all", "tabWidth": 2 } ``` 这里只配置了三个 Prettier 的选项,其余的选项可以根据具体需求进行更改。关于 Prettier 的具体选项,可以查看官方文档:https://prettier.io/docs/en/options.html 最后,在 VS Code 中的设置中,我们需要添加以下配置: ``` { "editor.defaultFormatter": "esbenp.prettier-vscode", "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[javascriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } } ``` 这个配置告诉 VS Code,在 JavaScript 和 TypeScript 语言的文件中,默认使用 Prettier 进行格式化。 综上所述,通过以上的配置,我们可以在 VS Code 中实现对 ESLintPrettier 的自动检测和代码格式化。这样,我们可以有效地提高代码的可读性、可维护性和质量,同时也能提高我们的开发效率和团队协作效率。 ### 回答3: VSCode是一款非常流行的代码编辑器,目前市场占有率已经超过了其他编辑器。同时,VSCode也支持各种插件和配置,可以帮助开发者更高效地编写代码。其中,ESLintPrettier是两款比较常见的插件,也是必不可少的。下面我们来讲一下如何在VSCode中配置ESLintPrettier。 1. 安装ESLintPrettier插件 首先,需要在VSCode的插件市场中搜索并安装ESLintPrettier插件。安装完成后,需要重新启动VSCode才能生效。 2. 配置ESLintVSCode中按下Ctrl+Shift+P,打开命令面板,然后输入“Open Workspace Settings”打开VSCode的设置。找到ESLint配置项,并进行配置。这里可以选择使用默认配置,也可以按自己需要进行定制化配置。 3. 配置Prettier 同样地,在命令面板中输入“Open Workspace Settings”打开VSCode的设置,找到Prettier配置项,并进行配置。这里同样可以选择默认配置或按自己需求进行配置。 4. 同步ESLintPrettier配置 配置完成后,需要同步ESLintPrettier的配置,以确保代码的风格一致。需要安装一个名为“eslint-plugin-prettier”的插件,然后在.eslintrc文件中进行配置。 以上就是在VSCode中配置ESLintPrettier的方法。配置完成后,可以在代码编写过程中更加高效和规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值