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 组件注册
Nov 20 Vue.js
vue element-ul实现展开和收起功能的实例代码
Nov 25 Vue.js
Vue组件生命周期运行原理解析
Nov 25 Vue.js
vue element实现表格合并行数据
Nov 30 Vue.js
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
vue使用require.context实现动态注册路由
Dec 25 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
vue+element ui实现锚点定位
Jun 29 Vue.js
vue3语法糖内的defineProps及defineEmits
Apr 14 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
PHP中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
用PHP实现递归循环每一个目录
2010/08/08 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
Vue.js实现输入框绑定的实例代码
2017/08/24 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
JS实现小星星特效
2019/12/24 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
2019/04/29 Python
python实现批量视频分帧、保存视频帧
2019/05/31 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
如何提高python 中for循环的效率
2020/04/15 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
接口的多继承会带来哪些问题
2015/08/17 面试题
大学生工作推荐信范文
2013/12/02 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
Java并发编程之Executor接口的使用
2021/06/21 Java/Android