热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vueeslint升级_ESLint的parser是个什么东西

ESLint会对我们的代码进行校验,而parser的作用是将我们写的代码转换为ESTree,ESLint会对ESTree进行校验。ESTree只是一个A
c9f4a0759d7c987b2c03a4945b0adc77.png

ESLint 会对我们的代码进行校验,而 parser 的作用是将我们写的代码转换为 ESTree,ESLint 会对 ESTree 进行校验。

ESTree 只是一个 AST 的某一种规范,ESTree 本质上还是 AST

Espree

ESLint 默认的 parser ,只转换 js,默认支持 ES5 的语法,可以通过制定 parserOptions 给 Espree 传递如下选项。

"parserOptions": {"ecmaVersion": 6,"sourceType": "module","ecmaFeatures": {"jsx": true}
}

  • ecmaVersion 可以开启更高 ES 版本的校验(已加入ES标准的语法,不包括实验性的语法),但需要注意的是一些新标准中的语法对 ESLint 的版本也有要求,如果发现ESLint 不支持校验,可能需要升级 ESLint 版本
  • sourceType 可以设置为 "script",如果使用 ESModule 可以设置为 "module"

@babel/eslint-parser

babel-eslint 不再维护和更新

该 parser 允许你使用 ESLint 校验所有 babel code。

ESLint的默认解析器核心规则仅支持最新的最终 ECMAScript 标准,不支持 Babel 提供的实验性(例如新功能)和非标准(例如Flow或TypeScript类型)语法。@ babel / eslint-parser 是允许 ESLint 在由 Babel 转换的源代码上运行的解析器。

如果你使用该解析器,还要使用 babel

当你使用 babel 时,babel 的解析器会把你的 code 转换为 AST,该解析器会将其转换为 ESLint 能懂的 ESTree。

ESLint的核心规则不支持实验性语法,因此可能无法正常工作,需要使用 @babel/eslint-plug 规则集。并且 ESLint 官方文档中的 parserOptions 只适用 Espree 解析器

该 praser 的 parserOptions 默认配置如下:

module.exports = {parser: "@babel/eslint-parser",parserOptions: {requireConfigFile: true, // 是否需要 babel 配置文件sourceType: "module", // script 或者 moduleallowImportExportEverywhere: false, // 设置为 true,import 和 export 声明 可以出现在文件的任务位置,否则只能出现在顶部ecmaFeatures: {globalReturn: false, // 设置为 true,当 sourceType 为 script 时,允许全局 return},babelOptions: {configFile: "path/to/config.js", // babel 的配置文件,可以不传},},
};

@typescript-eslint

ESLint 与 Typescript 对比:

  • ESLint:一个很棒的 Javascript Linter,它的默认 parser 会将代码转换为 AST,AST 被 plugin&rules 用来校验和生成错误信息
  • Typescript: 一个很棒的Javascript代码静态代码分析器。它的 parser 会将源码转换为 AST,这个 AST 被 typescript 编译器其他部分用来做校验例如类型检查等

然而,ESLint 识别的 AST 也就是它默认的 parser 最终转换出来的 AST 数据内容和格式(ESTree),与 typescript 的 parser 转换出来的 AST 的内容和格式是不一样的,所以 ESLint 是不能识别 typescript 的 parser 转换出来的 AST 内容。

这是 @typescript-eslint 存在的原因,兼容两者的 AST。

TSLint 不再推荐使用,并且后期这个仓库也会被抛弃,原因是 TSLint 是基于 Typescript 的 parser 转换出来的 AST,不能与 ESLint 一起使用

@typescript-eslint 主要包含几个包:

  • @typescript-eslint/parser
    • 读取 ESLint 的配置,并调用下面的这包
  • @typescript-eslint/typescript-estree
    • 调用 TypeScript Compiler,将 typescript 的 sourcecode 转换为 TypeScript AST,然后将 TypeScript AST 转换为 ESTree。
所以这块前提是需要安装 typescript 的
  • @typescript-eslint/eslint-plugin
    • 有很多 ESLint 的规则我们是可以复用的。尽管我们对 TypeScript AST 进行了转换,但转换后的 ESTree 中,针对 typescript 中的语法,ESLint 仍然是看不懂的。所以对于 typescript,ESLint 提供的一些规则不再适用。
    • 因此该 plugin 的存在就是为了做这样一件事,提供相应的 rule,让 ESLint 能够识别。同时为了避免冲突,在手动开启该 plugin 的某些规则时,需要将 ESLint 当中的一些规则关闭。

babel 支持解析 Typescript sourcecode,对于一些 Typescript 目前还不支持的语法,babel 可以解析,就像 js 需要使用 babel 一样。所以 Typescript Complier 不支持语法的 babel 支持。

所以如果在 Typesciprt 中使用了 babel,而 ESLint 的 parser 又是使用的 @typescript-eslint/parser 和其提供的 rules,由于 @typescript-eslint/parser 底层是依赖 Typescript complier 作为编译器,而 babel 转换时使用的是其自己的编译器,两者不一致,可能会出现使用了 babel 中支持而 Typescript complier不支持的 Typescript 语法,然后 ESLint 报错的情况。出现这种情况,有两种解决方式。

  1. 将 ESLint 的 parser 和 rules 替换为前面提到的 @babel/eslint-parser 和对应的 rules,这样就不会出现 babel 和 ESLint 的 parser 不一致
  2. 继续使用 @typescript-eslint/parser 和其提供的 rules,因为它支持我们自定义 rules,可以去社区找找对应的语法是否已经存在相关的 rule,或者自己编写。

vue 如何配置 ESLint

vue 官方提供了一个 ESLint 插件 eslint-plugin-vue,它提供了 parser 和 rules。parser 为 vue-eslint-parser,rules 为 https://eslint.vuejs.org/rules/。

如果想为 vue 单文件组件中的 script 部分使用单独的 parser 可以将 parserOptions.parser 指定为想使用的 parser 即可



推荐阅读
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
author-avatar
有些人笨的不行
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有