配置 eslint

240 阅读3分钟

Eslint

1、安装 eslint
npm i eslint -D
2、初始化 eslint 配置文件
// 方法一:在终端根据具体项目,选择配置项
// 1、代码风格
// 2、模块化方式(Esm、CommonJs...)
// 3、是否结合框架(React、Vue、无)
// 4、是否检验 Ts 文件
// 5、使用哪种方式安装包(npm、yarn、pnpm)
npx eslint --init 

// 方法二
npm init @eslint/config

// 方法三
手动创建 .eslintrc 文件
3、.eslintrc 常用配置

同一目录下存在多个配置文件,ESLint 将按照以下优先顺序使用

  • .eslintrc.js
  • .eslintrc.cjs
  • .eslintrc.yaml
  • .eslintrc.yml
  • .eslintrc.json
  • package.json

module.exports = {
  // 指定脚本运行的环境(预定义的全局变量)
  env: {
    es2021: true, // 声明js新的语法:WeakRef
    node: true, // 声明node下全局变量:__dirname
    browser: true, // 声明浏览器下全局变量:window、document
    commonjs: true
  },

  // 自定义全局变量
  globals: {
    _: true, // readonly、writable、off、
    $: true,
    utils: true,
    jQuery: true
  },

  /**
   * 采用哪种类型的解析器将代码转为 AST 抽象语法树(三种代码的转换方式)
   *   @value:Espree:默认只转换 js
   *   @value@babel/eslint-parser
   *     1、允许你使用 ESLint 校验所有 babel code
   *     2、babel 的解析器会把你的 code 转换为 AST,该解析器会将其转换为 ESLint 能懂的 ESTree
   *   @value@typescript-eslint/parser:将 TypeScript 转换成与 estree 兼容的形式
   *     1、ESLint 默认的 parser 会将代码转换为 AST(ESTree)
   *     2、ESTree 默认的 parser 会将源码转换为 AST(TSTree)
   *     3、@typescript-eslint 目的是兼容前两者的 “AST”
   */
  parser: "@babel/eslint-parser",

  // 指定解析器选项
  parserOptions: {
    ecmaVersion: "latest", // 指定 ECMAScript 版本:,默认 3,5 使用const报错
    sourceType: "module", // 指定要解析的代码是模块化代码还是脚本代码,默认为 "script",可选值为 "module"
    ecmaFeatures: { // 指定要启用的 JavaScript 语言特性
      globalReturn: true, //  允许在全局作用域下使用 return 语句
      impliedStrict: true, // 启用全局严格模式( ecmaVersion >= 5)
      jsx: true // 启用 jsx 语法(react)中
    } 
  },  

  // 继承语法规则(  别人定义好的 )
  extends: [
    // 'eslint:all' // eslint全部内置规则(285个,一般不用)
    "eslint:recommended" //  eslint中的recommended规范(50多个,推荐使用)
    // 'standard' // 第三方:标准规范 - eslint-config-standard 插件(200多个)

  ],

  // 自定义语法规则(覆盖extends)
  rules: {
    "no-var": 0, // 不让使用var
    "semi": [2, "never"], // 行尾出现分号报错
    "quotes": [2, "double"], // 单双引号:single、double
    "indent": ["error", 2, {outerIIFEBody: 0}], // 缩进对齐两个空格
    "comma-dangle": [2, "never"], // "最后" 出现逗号报错
    "no-undef": [0, "never"], // 不定义直接使用
    "no-unused-vars": [0, {vars: "all", args: "after-used"}], // 冗余变量
    "no-multiple-empty-lines": ["error", {max: 3, maxBOF: 1}], // 允许多个空行数量
    "no-multi-spaces": "error", // 连续使用多个空格
    "array-bracket-spacing": ["error", "never"], // 数组
    "object-curly-spacing": ["error", "never"], // 对象
    "block-spacing": ["error", "always"], // 在代码块'内部'
    "space-before-blocks": ["error", "never"], // 句块之前的空格
    "space-in-parens": ["error", "never"], // 圆括号内
    "comma-spacing": ["error", {before: false, after: true}], // 逗号以后空格
    "keyword-spacing": ["error", {after: true}], // 关键字之后空格
    "no-mixed-spaces-and-tabs": "error", // 禁止空格、tab混用
    "spaced-comment": ["error", "always"], // 注释前后空格
    "semi-spacing": "error", // 分号之后空格
    "space-infix-ops": "error", // 操作符
    "key-spacing": ["error", {afterColon: true}], // 对象属性后空格(冒号后)
    "arrow-spacing": "error", // 箭头函数前后空格
    "space-before-function-paren": ["error", {anonymous: "always", named: "always"}], // 函数
    "no-redeclare": "off"
  },

  // 解决动态导入语法报错:import('@/utils/a.js')
  plugins: ["import"]

  // 给某些文件单独设置规则
  // overrides: [
  //   {
  //     files: ["*-test.js", "*.spec.js"],
  //     rules: {
  //       "no-unused-expressions": "off"
  //     }
  //   }
  // ]
}

5、vscode: 保存文件,自动格式化
{
  // html标签tab自动补全
  "emmet.triggerExpansionOnTab": true,
  "editor.mouseWheelZoom": false,

  /**
   * ctrl + f:过滤文件
   */
  "search.exclude": {
    "**/node_modules": true,
    "**/dist": true,
    "**/public": true,
    "**/package-lock.json": true,
    "**/yarn.lock": true,
    "**/pnpm-lock.yaml": true
  },

 /**
   * prettier 格式化配置
   */
  "editor.formatOnSave": true, // 在保存文件时自动格式化代码
  "editor.defaultFormatter": "esbenp.prettier-vscode", // 指定默认的代码格式化工具 prettier
  "prettier.requireConfig": true,


  /**
   * eslint 格式化配置
   */
  "eslint.enable": true, // 启用 eslint (必须为 true)
  // "eslint.run": "onSave",
  // "eslint.format.enable": false, // eslint 是否格式化代码
  "editor.codeActionsOnSave": {  // 保存时为编辑器运行代码操作
    // "source.fixAll": "always",
    "source.fixAll.eslint": "always"
  },
  "eslint.options": {}, // 用于自定义 ESLint 插件的行为
  "eslint.validate": [ // 指定文件类型
    "javascript", //(.js)
    "javascriptreact", //(.jsx)
    "typescript", //(.ts)
    "typescriptreact", //(.tsx)
    "vue",
    "json",
    "html",
    "css",
    "jsx",
    "markdown"
  ],
}