vue+webpack中配置ESLint


Posted in Javascript onNovember 07, 2018

一、ESLint

协同开发过程中,经常感受到来自代码检视的恶意。代码习惯不一致,看半天;居然提交低级错误,我的天(??□′)?︵┻━┻!...研究了一番,决定使用ESLint来做代码规范检查。

二、配置方式

  • JavaScript注释:通过JavaScript注释把配置信息嵌入代码中。
  • package.json:在package.json文件中的eslintConfig字段中指定配置。
  • 配置文件:通过.eslintrc.(js/json/yaml/yml)的独立文件来为整个目录或者子目录指定配置信息,ESlint会查找并且自动读取配置文件。

三、配置过程(配置文件)

安装相关npm包

yarn add eslint babel-eslint eslint-plugin-vue eslint-friendly-formatter --dev

增加文件

  • .eslintignore 用来配置不需要检查的文件(类似git的.gitignore)。
  • .eslintrc.js 用来配置ESlint验证规则的配置文件。

修改webpack配置文件

module.exports = {
 module: {
  rules: [
   test: /\.(js|vue)$/,
   loader: "eslint-loader",
   enforce: "pre",
   //指定检查的目录
   include: [resolve(__dirname, 'src')],
   //eslint检查报告的格式规范
   options: {
    formatter: require("eslint-friendly-formatter")
   }
  ]
 }
}

四、配置文件详解

以.eslintrc.js为例

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/
 }
}

使用JavaScript注释启用或禁止指定规则

/* eslint-disable */
alert('message');
/* eslint-enable no-alert, no-console*/
...

层叠配置

ESlint支持层叠配置,检测文件的规则是其目录层级结构中所有.eslintrc文件的组合,当规则冲突的时候,离检测文件最近的规则优先。

默认情况下,ESlint会沿着父级目录网上寻找配置文件,直到根目录。如果配置文件中有root: true,则ESlint会停止在父级目录中查找。

五、配置过程中出现的问题

出现错误:Use the latest vue-eslint-parser。

解决方法: 把parser: "babel-eslint"移动到parserOptions中。

{
 //parser: "babel-eslint",
 parserOptions: {
  parser: "babel-eslint",
  //...
 }
}

问题原因: eslint-plugin-vue中的很多规则都需要vue-eslint-parser检查<template>, vue-eslint-parser和babel-parser二者有冲突。

参考链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中String.prototype用法实例
May 20 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
Aug 28 Javascript
JavaScript中的Number数字类型学习笔记
May 26 Javascript
jQ处理xml文件和xml字符串的方法(详解)
Nov 22 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
Dec 14 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
Jul 27 Javascript
浅谈ECMAScript6新特性之let、const
Aug 02 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
Oct 24 Javascript
vue中设置、获取、删除cookie的方法
Sep 21 Javascript
vue进入页面时滚动条始终在底部代码实例
Mar 26 Javascript
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
vue-父子组件和ref实例详解
Nov 10 Javascript
利用jqgrid实现上移下移单元格功能
Nov 07 #Javascript
React 源码中的依赖注入方法
Nov 07 #Javascript
监听angularJs列表数据是否渲染完毕的方法示例
Nov 07 #Javascript
详解react native页面间传递数据的几种方式
Nov 07 #Javascript
微信小程序使用npm支持踩坑
Nov 07 #Javascript
Angular Material Icon使用详解
Nov 07 #Javascript
详解Webpack loader 之 file-loader
Nov 07 #Javascript
You might like
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
2017/09/15 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
python多线程操作实例
2014/11/21 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
餐饮业会计岗位职责
2013/12/19 职场文书
家长会开场白和结束语
2015/05/29 职场文书
教师节班会开场白
2015/06/01 职场文书
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js