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 19 Vue.js
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
Vue实现点击当前行变色
Dec 14 Vue.js
Vue中computed和watch有哪些区别
Dec 19 Vue.js
vue实现登录功能
Dec 31 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
解读Vue组件注册方式
May 15 Vue.js
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 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最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
PDO::rollBack讲解
2019/01/29 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
javascript 定义初始化数组函数
2009/09/07 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
python中的字典详细介绍
2014/09/18 Python
Python中的闭包总结
2014/09/18 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
python3调用windows dos命令的例子
2019/08/14 Python
Python使用贪婪算法解决问题
2019/10/22 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
大学生的自我鉴定范文
2014/01/21 职场文书
机房搬迁方案
2014/05/01 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python
Pandas-DataFrame知识点汇总
2022/03/16 Python