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 相关文章推荐
Vue解决移动端弹窗滚动穿透问题
Dec 15 Vue.js
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 Vue.js
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
vue实现水波涟漪效果的点击反馈指令
May 31 Vue.js
详解Vue slot插槽
Nov 20 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
vue 实现弹窗关闭后刷新效果
Apr 08 Vue.js
vue ant design 封装弹窗表单的使用
Jun 01 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
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
php 动态多文件上传
2009/01/18 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
详解python Todo清单实战
2018/11/01 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
护理学专业求职信
2014/06/29 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
师德承诺书
2015/01/20 职场文书
2016新年慰问信范文
2015/03/25 职场文书
走近毛泽东观后感
2015/06/04 职场文书
红色经典观后感
2015/06/18 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
python之json文件转xml文件案例讲解
2021/08/07 Python