eslint:javascript代码质量检查工具。
目前大环境下主要有三款JS代码质量检查工具:jslint、jshint、eslint。
jslint:无需配置,直接使用,由于配置是定好的。缺点是有限的配置选项,不少规则不能禁用,规范严格,扩展性差,没法根据错误定位到对应的规则。
jshint:是基于jslint开发的,有了不少参数能够配置,支持配置文件,方便使用,支持了一些经常使用类库,支持了基本的ES6,但缺点却继承了jshint的一部分:不支持自定义规则、没法根据错误定位到对应的规则。
ESLint:默认规则里面包含了JSLint和JSHint的规则,易于迁移,这一点分明就是在抢jslint、jshint的用户;可配置为警告和错误两个等级,或者直接禁用掉,支持插件扩展,能够自定义规则,能够根据错误定位到对应的规则,支持ES6,惟一一个支持JSX的工具,缺点是须要进行一些自定义配置,执行速度上不如jslint和jshint。
下面是我平时使用的eslint的配置:javascript
{
"extends": "eslint:recommended", // 环境定义了预约义的全局变量。 "env": { //环境定义了预约义的全局变量。更多在官网查看 "browser":true, "node":true, "commonjs":true, "amd":true, "es6":true, "mocha":true }, "parser": "babel-eslint", // JavaScript 语言选项 "parserOptions": { // ECMAScript 版本 "ecmaVersion":6, "sourceType":"module",//module // 想使用的额外的语言特性: "ecmaFeatures": { // 容许在全局做用域下使用 return 语句 "globalReturn":true, // impliedStric "impliedStrict":true, // 启用 JSX "jsx":true } }, "plugins": [ "react", "import" ], /** * "off" 或 0 - 关闭规则 * "warn" 或 1 - 开启规则,使用警告级别的错误:warn (不会致使程序退出), * "error" 或 2 - 开启规则,使用错误级别的错误:error (当被触发的时候,程序会退出) */ "rules": { //////////////// // 可能的错误 // //////////////// // 禁止条件表达式中出现赋值操做符 "no-cond-assign":2, // 禁用 console "no-console":0, // 禁止在条件中使用常量表达式 // if (false) { // doSomethingUnfinished(); // } //cuowu "no-constant-condition":2, // 禁止在正则表达式中使用控制字符 :new RegExp("\x1f") "no-control-regex":2, // 数组和对象键值对最后一个逗号, never参数:不能带末尾的逗号, always参数:必须带末尾的逗号, // always-multiline:多行模式必须带逗号,单行模式不能带逗号 "comma-dangle": [1,"always-multiline"], // 禁用 debugger "no-debugger":2, // 禁止 function 定义中出现重名参数 "no-dupe-args":2, // 禁止对象字面量中出现重复的 key "no-dupe-keys":2, // 禁止重复的 case 标签 "no-duplicate-case":2, // 禁止空语句块 "no-empty":2, // 禁止在正则表达式中使用空字符集 (/^abc[]/) "no-empty-character-class":2, // 禁止对 catch 子句的参数从新赋值 "no-ex-assign":2, // 禁止没必要要的布尔转换 "no-extra-boolean-cast":2, // 禁止没必要要的括号 //(a * b) + c;//报错 "no-extra-parens":0, // 禁止没必要要的分号 "no-extra-semi":2, // 禁止对 function 声明从新赋值 "no-func-assign":2, // 禁止在嵌套的块中出现 function 或 var 声明 "no-inner-declarations": [2,"functions"], // 禁止 RegExp 构造函数中无效的正则表达式字符串 "no-invalid-regexp":2, // 禁止在字符串和注释以外不规则的空白 "no-irregular-whitespace":2, // 禁止在 in 表达式中出现否认的左操做数 "no-negated-in-lhs":2, // 禁止把全局对象 (Math 和 JSON) 做为函数调用 错误:var math = Math(); "no-obj-calls":2, // 禁止直接使用 Object.prototypes 的内置属性 "no-prototype-builtins":0, // 禁止正则表达式字面量中出现多个空格 "no-regex-spaces":2, // 禁用稀疏数组 "no-sparse-arrays":2, // 禁止出现使人困惑的多行表达式 "no-unexpected-multiline":2, // 禁止在return、throw、continue 和 break语句以后出现不可达代码 /* function foo() { return true; console.log("done"); }//错误 */ "no-unreachable":2, // 要求使用 isNaN() 检查 NaN "use-isnan":2, // 强制使用有效的 JSDoc 注释 "valid-jsdoc":1, // 强制 typeof 表达式与有效的字符串进行比较 // typeof foo === "undefimed" 错误 "valid-typeof":2, ////////////// // 最佳实践 // ////////////// // 定义对象的set存取器属性时,强制定义get "accessor-pairs":2, // 强制数组方法的回调函数中有 return 语句 "array-callback-return":0, // 强制把变量的使用限制在其定义的做用域范围内 "block-scoped-var":0, // 限制圈复杂度,也就是相似if else能连续接多少个 "complexity": [2,9], // 要求 return 语句要么老是指定返回的值,要么不指定 "consistent-return":0, // 强制全部控制语句使用一致的括号风格 "curly": [2,"all"], // switch 语句强制 default 分支,也可添加 // no default 注释取消这次警告 "default-case":2, // 强制object.key 中 . 的位置,参数: // property,'.'号应与属性在同一行 // object, '.' 号应与对象名在同一行 "dot-location": [2,"property"], // 强制使用.号取属性 // 参数: allowKeywords:true 使用保留字作属性名时,只能使用.方式取属性 // false 使用保留字作属性名时, 只能使用[]方式取属性 e.g [2, {"allowKeywords": false}] // allowPattern: 当属性名匹配提供的正则表达式时,容许使用[]方式取值,不然只能用.号取值 e.g [2, {"allowPattern": "^[a-z]+(_[a-z]+)+$"}] "dot-notation": [2, {"allowKeywords":false}], // 使用 === 替代 == allow-null容许null和undefined== "eqeqeq": [2,"allow-null"], // 要求 for-in 循环中有一个 if 语句 "guard-for-in":2, // 禁用 alert、confirm 和 prompt "no-alert":0, // 禁用 arguments.caller 或 arguments.callee "no-caller":2, // 不容许在 case 子句中使用词法声明 "no-case-declarations":2, // 禁止除法操做符显式的出如今正则表达式开始的位置 "no-div-regex":2, // 禁止 if 语句中有 return 以后有 else "no-else-return":0, // 禁止出现空函数.若是一个函数包含了一条注释,它将不会被认为有问题。 "no-empty-function":2, // 禁止使用空解构模式no-empty-pattern "no-empty-pattern":2, // 禁止在没有类型检查操做符的状况下与 null 进行比较 "no-eq-null":1, // 禁用 eval() "no-eval":2, // 禁止扩展原生类型 "no-extend-native":2, // 禁止没必要要的 .bind() 调用 "no-extra-bind":2, // 禁用没必要要的标签 "no-extra-label:":0, // 禁止 case 语句落空 "no-fallthrough":2, // 禁止数字字面量中使用前导和末尾小数点 "no-floating-decimal":