协同开发过程当中,常常感觉到来自代码检视的恶意。代码习惯不一致,看半天;竟然提交低级错误,个人天(╯‵□′)╯︵┻━┻!...研究了一番,决定使用ESLint来作代码规范检查。javascript
安装相关npm包vue
yarn add eslint babel-eslint eslint-loader eslint-plugin-vue eslint-friendly-formatter --dev
.eslintignore 用来配置不须要检查的文件(相似git的.gitignore)。java
.eslintrc.js 用来配置ESlint验证规则的配置文件。jquery
修改webpack配置文件webpack
module.exports = { module: { rules: [ test: /\.(js|vue)$/, loader: "eslint-loader", enforce: "pre", //指定检查的目录 include: [resolve(__dirname, 'src')], //eslint检查报告的格式规范 options: { formatter: require("eslint-friendly-formatter") } ] } }
module.exports = { //一旦配置了root,ESlint中止在父级目录中查找配置文件 root: true, //解析器 parser: "babel-eslint", //想要支持的JS语言选项 parserOptions: { //启用ES6语法支持(若是支持es6的全局变量{env: {es6: true}},则默认启用ES6语法支持) //此处也可使用年份命名的版本号:2015 ecmaVersion: 6, //默认为script sourceType: "module", //支持其余的语言特性 ecmaFeatures: { //... } }, //代码运行的环境,每一个环境都会有一套预约义的全局对象,不一样环境能够组合使用 env: { es6: true, browser: true, jquery: true }, //访问当前源文件中未定义的变量时,no-undef会报警告。 //若是这些全局变量是合规的,能够在globals中配置,避免这些全局变量发出警告 globals: { //配置给全局变量的布尔值,是用来控制该全局变量是否容许被重写 test_param: true }, //支持第三方插件的规则,插件以eslint-plugin-做为前缀,配置时该前缀可省略 //检查vue文件须要eslint-plugin-vue插件 plugins: ["vue"], //集成推荐的规则 extends: ["eslint:recommended", "plugin:vue/essential"], //启用额外的规则或者覆盖默认的规则 //规则级别分别:为"off"(0)关闭、"warn"(1)警告、"error"(2)错误--error触发时,程序退出 rules: { //关闭“禁用console”规则 "no-console": "off", //缩进不规范警告,要求缩进为2个空格,默认值为4个空格 "indent": ["warn", 2, { //设置为1时强制switch语句中case的缩进为2个空格 "SwitchCase": 1, //分别配置var、let和const的缩进 "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } }], //定义字符串不规范错误,要求字符串使用双引号 quotes: ["error", "double"], //.... //更多规则可查看http://eslint.cn/docs/rules/ } }
/* eslint-disable */ alert('message'); /* eslint-enable no-alert, no-console*/ ...
ESlint支持层叠配置,检测文件的规则是其目录层级结构中全部.eslintrc文件的组合,当规则冲突的时候,离检测文件最近的规则优先。git
默认状况下,ESlint会沿着父级目录网上寻找配置文件,直到根目录。若是配置文件中有root: true
,则ESlint会中止在父级目录中查找。es6
出现错误:Use the latest vue-eslint-parser。github
解决方法: 把parser: "babel-eslint"
移动到parserOptions中。web
{ //parser: "babel-eslint", parserOptions: { parser: "babel-eslint", //... } }
问题缘由: eslint-plugin-vue
中的不少规则都须要vue-eslint-parser
检查<template>
, vue-eslint-parser
和babel-parser
两者有冲突。npm