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 $attrs & inheritAttr实现button禁用效果案例
Dec 07 Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
基于vuex实现购物车功能
Jan 10 Vue.js
Vue ​v-model相关知识总结
Jan 28 Vue.js
Vue 事件的$event参数=事件的值案例
Jan 29 Vue.js
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
Feb 20 Vue.js
Vue3 Composition API的使用简介
Mar 29 Vue.js
vue3获取当前路由地址
Feb 18 Vue.js
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
Vue全局事件总线你了解吗
Feb 24 Vue.js
vue实现在data里引入相对路径
Jun 05 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中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
半角全角相互转换的js函数
2009/10/16 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
Js 冒泡事件阻止实现代码
2013/01/27 Javascript
js数组的操作详解
2013/03/27 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
python如何将图片转换为字符图片
2020/08/19 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
简述数组与指针的区别
2014/01/02 面试题
普通院校学生的自荐信
2013/11/27 职场文书
外语专业毕业生自荐信
2014/04/14 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers