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用mixin合并重复代码的实现
Nov 27 Vue.js
Vue+penlayers实现多边形绘制及展示
Dec 24 Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
Vue实现简单计算器
Jan 20 Vue.js
vue keep-alive的简单总结
Jan 25 Vue.js
Vue ​v-model相关知识总结
Jan 28 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
vue 实现上传组件
May 31 Vue.js
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
vue elementUI批量上传文件
Apr 26 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 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 XML操作类DOMDocument
2009/12/16 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
学习vue.js计算属性
2016/12/03 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
Python的re模块正则表达式操作
2016/05/25 Python
python3操作mysql数据库的方法
2017/06/23 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
使用tensorflow实现线性回归
2018/09/08 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
基于python实现操作redis及消息队列
2020/08/27 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
运动会入场词200字
2014/02/15 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
学校督导评估方案
2014/06/10 职场文书
民族精神月活动总结
2014/08/28 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
公司放假通知怎么写
2015/04/15 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
详解Python中*args和**kwargs的使用
2022/04/07 Python