官方地址:http://eslint.org/
ESLint是一个开源的JavaScript校验插件,由Nicholas C. Zakas 创建于2013六月初。eslint代码校验是一种静态的代码分析,通常用来校验语法的或代码书写风格,但不指定风格。校验规则适用大多数编程语言和编译器,有时也把规则加于到编译过程。
JavaScript是一种动态的弱类型的语言,编写时尤其容易出现语法错误。因为不能像编译语言那样有编译的过程(编译过程有词法、语法分析), 代码通常需要执行才能发现语法或其他错误。静态分析工具如ESLint允许开发者不执行代码也能发现问题。
ESLint被设计成允许开发人员创建自己的校验的规则。ESLint的规则是可配置的。默认的规则也可以像插件的一样编写。它们都可以遵循相同的模式,无论规则本身,还是其校验的代码。ESLint已经内置基本的规则,使它可以立即生效,当然你也可以动态地配置这些规则。
EsLint提供以下支持(包括不限于):
1.ES6,ES5
2.JSX
3.Style检查
4.自定义错误和提示
EsLint提供以下几种校验(包括但不限于):
1.语法错误校验
2.编写风格(变量命名规则、符号使用、缩进等)
3.未被使用的参数提醒、未运行到的代码块
ESlint 可以用于nodejs编译/运行时的校验,也可以作为插件的形式用于编辑器
例如:vs code ,可以在扩展里面下载eslint的插件,其它编辑器请自行度娘。
ESLint用Node.js通过NPM提供快速的运行环境,安装方便。
基本的命令如下:
$ npm install eslint --save-dev // 安装-并保存
$ ./node_modules/.bin/eslint –init //
初始化
$ eslint yourfile.js //
校验代码
当你运行初始化命eslint--init令后(注意,要在你的项目目录下),你的项目根目录有就生成.eslintrc 文件,这个文件就是校验规则文件,例如:
{
"rules":{
"semi":["error","always"],
"quotes":["error","double"]
}
}
- "off" or 0 – 关闭规则
- "warn" or 1 – 警告模式,不影响现存代码运行便于
- "error" or 2 – 错误模式,即严格模式不符合规则则报错
你也可以使用推荐模式
"extends": "eslint:recommended"
当你有些目录不想校验什么办?可以使用列外规则文件.eslintignore,里面直接写入你文件的相对路径即可
src/assets/**/*.js
src/config/**/*.js
src/components/calendarPhone.vue
当然你也可以在package.json文件里添加eslintConfig字段,EsLint都会自动读取验证。(具体规则可查看package.json的配置)
.eslintrc 格式说明
{
// 环境定义了预定义的全局变量。
"env": {
//环境定义了预定义的全局变量。更多在官网查看
"browser":true,
"node":true,
"commonjs":true,
"amd":true,
"es6":true,
"mocha":true
},
// JavaScript 语言选项
"parserOptions": {
// ECMAScript 版本
"ecmaVersion":6,
"sourceType":"script",//module
// 想使用的额外的语言特性:
"ecmaFeatures": {
// 允许在全局作用域下使用 return 语句
"globalReturn":true,
// impliedStric
"impliedStrict":true,
// 启用 JSX
"jsx":true
}
},
/**
* "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,