eslint 学习笔记

Author

华丽

PublishDate

2023-08-04

category

编程

更多详细信息可以参考 eslint 官方文档 配置文件

安装

首先你需要安装 eslint​ 才能使用 eslint 相关的功能。

npm install eslint --save-dev
# 或者是全局安装
npm install eslint -g

然后你还需要一个配置文件,一般使用 .eslintrc.js​ 或 .eslintrc.json​ 。

module.exports = {
  extends: [],
  plugins: [],
  rules: {},
}

配置

基本规则

配置文件一般放置在项目的根目录,这样可以让你项目的所有文件都使用相同的规则。当然,你也可以在子文件夹中单独添加一个配置文件,这时子文件夹中的配置会和父级的配置合并,子配置优先。如果你不希望子文件夹应用父级的规则,那么可以在子配置中添加 root: true​ ,这样 eslint​ 就会忽略外部的配置。

parser

eslint​ 默认使用 espree​ 作为解释器,这也就意味着它只能解析常规的 js​ 文件。如果项目中使用了 vue​ 或者 ts​ ,那么默认的解释器就不能处理这些文件。这时就需要指定解释器,比如 vue-eslint-parser​ 或者 @typescript-eslint/parser​ 。

特别的,如果你使用 vue-eslint-parser​ 作为解释器,那么还可以通过配置 parserOptions.parser​来制定 SFC 中 <script>​ 内容的解释器,具体可以参考 vue-eslint-parser

extends 继承

使用继承可以支持使用共享的配置。如果 配置文件B​ 继承自 配置文件A​ ,B 会以 A 为基础,并覆盖 A 的配置。具体的覆盖规则可以参考 扩展配置文件 。如果同时配置了多个继承,那么后声明的会覆盖先声明的。

module.exports = {
  extends: [
    ./.eslintrc.A.js,
    ./.eslintrc.B.js,  // <-- B 会覆盖 A 中的规则
  ],
}

这样的一个好处是可以把一些公共的规则抽象出来,便于复用。比如我们在配置 vue 项目时常使用到的 推荐规则 就是通过 extends​ 加载进来的。

使用 extends​ 不仅会继承 rules​ ,同时包括 plugins​、parserOptions​、overriads​ 等其他配置都可以被继承。

plugins 插件

一个 plugin​ 可以理解为一系列的规则,一般需要配合特定的 parse​ 使用。只添加插件时规则是不生效的,它只代表 eslint 可以支持新的规则,只有当你在 rules​ 中定义或者使用 extends​ 间接使用时才会生效。

比如当安装 eslint-plugin-vue​ 并进行正确配置,则可以启用相关的规则。

module.exports = {
  // ↓ 引入 vue 相关规则
  plugin: ['vue'],
  // ↓ 启用规则
  extends: ['plugin:vue/recommended']
  // ↓ 覆盖规则  
  rules: {
    'vue/no-unused-components': 1,
  }
}

注意,在我们的配置中,并没有指定 parse​ 。前面提到,eslint 默认使用 espree​ 来解析文件,这里为什么可以解析 vue 文件呢?因为在 plugin:vue/recommended​ 中,其实已经指定了parse​ ,可以参考 eslint-plugin-vue/lib/configs/base.js

overrides 覆盖

当常规配置不能满足个性需求,比如某些特定目录下的文件不进行特定的检查时,可以使用覆盖来解决。在同一配置文件中,覆盖的优先级高于常规配置。

module.exports = {
  ...
  overrides: [  
    {
      files: ['*.vue'],
      parser: 'vue-eslint-parser',
      parserOptions: {
        parser: '@typescript-eslint/parser',
      },
      rules: {
        'no-unused-vars': 'off',
        'no-undef': 'off',
      },
    },
  ],
  ...
}

比如,在上面的配置中,默认使用 espree​ 作为解释器,但是如果文件名匹配 *.vue​ 时则优先使用覆盖的配置也就是使用 vue-eslint-parser​ 作为解释器,并且声明使用 @typescript-eslint/parser​ 作为 sfc 中 <script>​ 的解释器。

闽 ICP 备 2021009779 号 - 1 | Copyright © 2020 华丽 | Powered By Hugo