ESLint 是如何检查 .vue 文件的


Posted in Vue.js onNovember 30, 2020

近期要做一个类似的内容,学习了一下 Vue 是如何做的。

ESLint 中的扩展机制

首先需要了解一下如何才能扩展 ESLint 的功能。ESLint 扩展机制主要有 Rules、Plugins、Formatters、Parsers,Formatters 目前不需要用到,因此着重看一下其他三种方式。

Parser

用于自定义的解析文件内容,返回 AST 给后续步骤使用。

Rules

用于定义校验规则。

Plugins

plugin 是多种功能的一个集合,可以定义以下内容:

  • Rules:校验规则。
  • Environments:环境变量。
  • Processors:处理文件前后的钩子函数。preprocess、postprocess。
  • Configs:一些预置的配置,可以让用户指定使用。

Vue 相关代码库

用于 .vue 文件的 eslint 代码库有两个:eslint-plugin-vue 和 vue-eslint-parser。

eslint-plugin-vue 用于提供 Rules。

vue-eslint-parser 用于解析 .vue 文件,尤其是 template 部分。

eslint-plugin-vue

入口文件为 lib/index.js,其中设置了三部分内容,rules、configs 和 processors。

rules

rules 部分对应着非常多的校验规则,放在 rules 目录下。rules 中关于 template 部分的校验,处理的是 vue-eslint-parser 中生成的 AST,这个 AST 的格式定义可以在这里查看:https://github.com/vuejs/vue-eslint-parser/blob/master/docs/ast.md

configs

configs 部分预置了很多配置选项,不同选项的区别主要在于 rules 的开关设置不同,我们不需要关心。这里我们主要看 base 配置中的 parser 部分:

ESLint 是如何检查 .vue 文件的

parser 制定为了 vue-eslint-parser,这就是为什么我们不用手动装 vue-eslint-parser,而只需要安装 eslint-plugin-vue 的原因。

processors

最后一部分是 processors,他是一个对象:

ESLint 是如何检查 .vue 文件的

其中 preprocess 没有做任何事情,直接将 code 返回了。

有时文件中会有一些注释来开启关闭某些 rules,而 postprocess 所做的内容是根据这些注释对 messages 做一个过滤。

vue-eslint-parser

vue-eslint-parser 的入口文件是 src/index.ts,该文件暴露出了 parseForESLint 和 parse 方法,这两个方法做的事情是一样的:输入原始代码,返回解析后的 AST。

ESLint 是如何检查 .vue 文件的

由于配置 parser 后,所有文件都会经过 vue-eslint-parser,因此需要判断是否是 .vue 文件,如果不是的话,使用 espree (ESLint 默认的 JS 解析器) 或用户自定义的其他 parser 来处理 js 文件内容。

如果判断是 vue 文件,那么会对 HTMLParser 来解析 .vue 文件内容,获取到 script 和 template 部分。script 部分使用 espree 或用户自定义的其他 parser 来处理 js 内容,template 部分则已经由 HTMLParser 解析过了,直接使用即可。

总体流程

最后是总体的流程:

ESLint 是如何检查 .vue 文件的

以上就是ESLint 是如何检查 .vue 文件的的详细内容,更多关于ESLint 检测.vue文件的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
vue 通过base64实现图片下载功能
Dec 19 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
vue3中的组件间通信
Mar 31 Vue.js
如何使用vue3打造一个物料库
May 08 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
vue elementUI批量上传文件
Apr 26 Vue.js
vue实现在data里引入相对路径
Jun 05 Vue.js
Vue用mixin合并重复代码的实现
Nov 27 #Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 #Vue.js
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 #Vue.js
vuex的数据渲染与修改浅析
Nov 26 #Vue.js
vue动态合并单元格并添加小计合计功能示例
Nov 26 #Vue.js
vue单元格多列合并的实现
Nov 26 #Vue.js
VUE项目实现主题切换的多种方法
Nov 26 #Vue.js
You might like
SONY ICF-F10中波修复记
2021/03/02 无线电
BBS(php & mysql)完整版(一)
2006/10/09 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
JS模块与命名空间的介绍
2013/03/22 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
python读写配置文件操作示例
2019/07/03 Python
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
韩语专业本科生求职信
2013/10/01 职场文书
简短的公司员工自我评价分享
2013/11/13 职场文书
工地资料员岗位职责
2013/12/31 职场文书
承诺书格式
2014/06/03 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
如何用python反转图片,视频
2021/04/24 Python
Python实现位图分割的效果
2021/11/20 Python