ESLint语法自定义规则

ESlint有助我们写成风格统一的代码,但是其中有一些默认配置并不符合个人的习惯,我们可以手动对其进行更改。
在vue-cli创建的项目中,所有的ESlint配置都是写在.eslintrc.js中的
如果是在.eslintrc.js文件中,所有的属性都通过module.exports = {}进行导出,如果是.eslintrc.json文件,则属性直接定义在文件中即可。
下面是一些常用属性的配置代码:

eslint解析器配置项:指定js的导入方式,module是指通过模块导入,默认值为script(表示通过script标签引入): parserOptions: { sourceType: "module"}

rules属性是一个对象,对象中包含很多规则,规则的值主要有0,1和2这三种:
0 或者"off" ,表示关闭规则。
1或者"warn" ,打开规则,并且将规则视为一个警告(并不会导致检查不通过)。
2或者"error" ,打开规则,并且将规则视为一个错误 (退出码为1,检查不通过)。
在行内书写规则,需要写在/* eslint ... */

我们需要的绝大多数规则都是在这个rules对象中:

比如说我们想要修改代码缩进,就在配置文件中的rules对象中添加一个属性:
使用浏览器默认配置 'indent':0
使用两个空格作缩进 "indent": ["error", 2]
使用Tab作为缩进 "indent": ["error", "tab"]

比如说我们想要每行代码末尾都要有分号: 'semi':["error","always"] ,这样,你的 js 代码每一个表达式的结尾就应该以分号结尾,否则 eslint 会给出错误提示。
如果你希望 eslint 不检查分号这一项,这个时候结尾的分号,你加也可以,不加也可以,在 rules 字段配置: "semi": [0, "never"],

常用的规则:
与Javascript代码中可能的错误有关的规则
禁止条件表达式中出现模棱两可的赋值操作符:no-cond-assign
禁用console:no-console
禁止在条件中使用常量表达式:no-constant-condition
禁用 debugger :no-debugger
禁止 function 定义中出现重名参数 :no-dupe-args
禁止对象字面量中出现重复的 key :no-dupe-keys
禁止出现重复的 case 标签 :no-duplicate-case
禁止出现空语句块 :no-empty
禁止对 catch 子句的参数重新赋值 :no-ex-assign
禁止不必要的布尔转换 :no-extra-boolean-cast
禁止不必要的括号 :no-extra-parens
禁止不必要的分号 :no-extra-semi
禁止对 function 声明重新赋值 :no-func-assign
禁止在嵌套的块中出现变量声明或 function 声明 :no-inner-declarations
禁止在字符串和注释之外不规则的空白 :no-irregular-whitespace
禁止把全局对象作为函数调用 :no-obj-calls
禁用稀疏数组 :no-sparse-arrays
禁止直接使用Object.prototypes 的内置属性 :no-prototype-builtins
禁止出现令人困惑的多行表达式 :no-unexpected-multiline
禁止在return、throw、continue 和 break语句之后出现不可达代码 :no-unreachable
要求使用 isNaN() 检查 NaN :use-isnan
强制 typeof 表达式与有效的字符串进行比较:valid-typeof

下面这些规则是关于最佳实践的,帮助你避免一些问题:
强制数组方法的回调函数中有 return 语句 :array-callback-return
强制把变量的使用限制在其定义的作用域范围内 :block-scoped-var
指定程序中允许的最大环路复杂度 :complexity
要求 return 语句要么总是指定返回的值,要么不指定 :consistent-return
强制所有控制语句使用一致的括号风格 :curly
要求 switch 语句中有 default 分支 :default-case
强制在点号之前和之后一致的换行 :dot-location
强制在任何允许的时候使用点号 :dot-notation
要求使用 === 和 !== :eqeqeq
要求 for-in 循环中有一个 if 语句 :guard-for-in
禁用 alert、confirm 和 prompt :no-alert
不允许在 case 子句中使用词法声明 :no-case-declarations
禁止 if 语句中有 return 之后有 else :no-else-return
禁止出现空函数 :no-empty-function
禁止在没有类型检查操作符的情况下与 null 进行比较 :no-eq-null
禁用 eval() :no-eval
禁止不必要的 .bind() 调用 :no-extra-bind
禁止 case 语句落空 :no-fallthrough
禁止数字字面量中使用前导和末尾小数点 :no-floating-decimal
禁止使用短符号进行类型转换 :no-implicit-coercion
禁止在全局范围内使用 var 和命名的 function 声明 :no-implicit-globals
禁止 this 关键字出现在类和类对象之外 :no-invalid-this
禁用不必要的嵌套块 :no-lone-blocks
禁止在循环中出现 function 声明和表达式 :no-loop-func
禁用魔术数字 :no-magic-numbers
禁止使用多个空格 :no-multi-spaces
禁止使用多行字符串 :no-multi-str
禁止在非赋值或条件语句中使用 new 操作符 :no-new
禁止对 Function 对象使用 new 操作符 :no-new-func
禁止对 String,Number 和 Boolean 使用 new 操作符 :no-new-wrappers
不允许对 function 的参数进行重新赋值 :no-param-reassign
禁止使用 var 多次声明同一变量 :no-redeclare
禁止在 return 语句中使用赋值语句 :no-return-assign
禁止使用 javascript: url :no-script-url
禁止自我赋值 :no-self-assign
禁止自身比较 :no-self-compare
禁用逗号操作符 :no-sequences
禁用一成不变的循环条件 :no-unmodified-loop-condition
禁止出现未使用过的表达式 :no-unused-expressions
禁止不必要的 .call() 和 .apply() :no-useless-call
禁止不必要的字符串字面量或模板字面量的连接 :no-useless-concat
要求所有的 var 声明出现在它们所在的作用域顶部:vars-on-top

与使用严格模式和严格模式指令有关规则:
要求或禁止使用严格模式指令 :strict

与变量声明有关规则:
要求或禁止 var 声明中的初始化 : init-declarations
不允许 catch 子句的参数与外层作用域中的变量同名 :no-catch-shadow
禁用特定的全局变量 :no-restricted-globals
禁止 var 声明 与外层作用域的变量同名 :no-shadow
禁用未声明的变量,除非它们在 /global / 注释中被提到 :no-undef
禁止将变量初始化为 undefined :no-undef-init
禁止出现未使用过的变量 :no-unused-vars
不允许在变量定义之前使用它们 :no-use-before-define

关于Node.js 或 在浏览器中使用CommonJS 的规则:
要求 require() 出现在顶层模块作用域中 :global-require