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 相关文章推荐
vuex的数据渲染与修改浅析
Nov 26 Vue.js
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
vue-router懒加载的3种方式汇总
Feb 28 Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 Vue.js
vue backtop组件的实现完整代码
Apr 07 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
关于Vue中的options选项
Mar 22 Vue.js
vue实现省市区联动 element-china-area-data插件
Apr 22 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
2015/02/13 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
Python实现的Excel文件读写类
2015/07/30 Python
Python找出9个连续的空闲端口
2016/02/01 Python
python版飞机大战代码分享
2018/11/20 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
python opencv实现图像边缘检测
2019/04/29 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
六月份红领巾广播稿
2014/02/03 职场文书
广告业务员岗位职责
2014/02/06 职场文书
合作投资意向书
2014/04/01 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
违纪检讨书
2015/01/27 职场文书
幼儿园见习总结
2015/06/23 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书