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 函数调用的对象和方法
Jul 01 Javascript
Dojo 学习要点
Sep 03 Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 Javascript
JS使用post提交的两种方式
Dec 03 Javascript
直接拿来用的页面跳转进度条JS实现
Jan 06 Javascript
D3.js实现直方图的方法详解
Sep 25 Javascript
JS实现仿PS的调色板效果完整实例
Dec 21 Javascript
微信小程序图片横向左右滑动案例
May 19 Javascript
webpack优化的深入理解
Dec 10 Javascript
微信小程序实现人脸识别登陆的示例代码
Apr 02 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
Jul 31 Javascript
使用js和canvas实现时钟效果
Sep 08 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
FCKeditor的安装(PHP)
2007/01/13 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python3+PyQt5使用数据库表视图
2018/04/24 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
婴儿地球:Baby Earth
2018/12/25 全球购物
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
创业计划实施的7大步骤
2014/02/05 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
老人节标语大全
2014/10/08 职场文书
《春酒》教学反思
2016/02/22 职场文书
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技