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项目利用axios请求接口下载excel
Nov 17 Vue.js
vue element-ul实现展开和收起功能的实例代码
Nov 25 Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
vue实现验证用户名是否可用
Jan 20 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
Jun 09 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 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的FTP学习(一)
2006/10/09 PHP
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
ThinkPHP5&5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
js选项卡的实现方法
2015/02/09 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
pycharm导入源码的具体步骤
2020/08/04 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
销售助理岗位职责
2014/02/21 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
html粘性页脚的具体使用
2022/01/18 HTML / CSS
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA