esbuild中文文档-语法转换(Transformation - Supported、Target)

news/2025/2/12 21:23:06/

文章目录

  • 语法转换 Transformation
    • 配置支持的语法 Supported
    • 构建目标 Target
  • 结语

哈喽,大家好!我是「励志前端小黑哥」,我带着最新发布的文章又来了!

老规矩,小手动起来~点赞关注不迷路!

esbuild简单介绍

esbuild为了突破JavaScript语言的瓶颈,采用了Go语言编写,构建速度与同代码量下的webpack对比提升在10倍以上,开创了构建工具性能的新时代。

它的中文文档,本人正在不断的更新完善中,欢迎大家关注阅读!

语法转换 Transformation

配置支持的语法 Supported

Supported by: Build and Transform

通过此设置,您可以在单个语法功能级别自定义esbuild的一组不受支持的语法功能。例如,您可以使用它来告诉esbuild不支持BigInt,这样esbuild在尝试使用BigInt时就会生成错误。通常,这是在您使用target配置时自动为您配置的,您通常应该使用target配置而不是此配置。如果除此配置外还指定了target,则此设置将覆盖target指定的内容。

以下是一些示例,说明为什么您可能希望使用此设置而不是设置target,或者除了设置target之外:

  • JavaScript运行时通常会快速实现较新的语法功能,其速度比等效的旧JavaScript慢,您可以通过告诉esbuild不支持这些语法功能来加快速度。例如,V8有一个关于对象扩展的性能缺陷long-standing performance bug regarding object spread,你可以通过手动复制属性而不使用对象扩展语法来避免它。

  • 除了esbuildtarget设置可以识别的JavaScript实现之外,还有许多其他JavaScript实现,esbuild可能不支持某些功能。如果您的target实现了这样的一个不支持的功能,则可以使用此设置使用自定义语法兼容这个功能呢,而无需更改esbuild本身。例如,TypeScriptJavaScript解析器可能不支持任意模块命名空间标识符名称,因此您可能希望在针对TypeScriptJavaScript解析器时关闭这些命名空间标识符。

  • 您可能正在使用另一个工具处理esbuild的输出,并且您可能希望esbuild转换某些功能,而另一工具转换某些其他功能。例如,如果您使用esbuild将文件单独转换为ES5,但随后将输出馈送到Webpack中进行打包,则可能需要保留import()表达式,即使它们在ES5中会报错。

如果您希望esbuild认为某个语法功能不受支持,可以这样指定:

esbuild app.js --supported:bigint=false

语法功能是使用特定于esbuild的功能名称指定的。完整的功能名称如下所示:

JavaScript:

arbitrary-module-namespace-names
array-spread
arrow
async-await
async-generator
bigint
class
class-field
class-private-accessor
class-private-brand-check
class-private-field
class-private-method
class-private-static-accessor
class-private-static-field
class-private-static-method
class-static-blocks
class-static-field
const-and-let
decorators
default-argument
destructuring
dynamic-import
exponent-operator
export-star-as
for-await
for-of
function-or-class-property-access
generator
hashbang
import-assertions
import-meta
inline-script
logical-assignment
nested-rest-binding
new-target
node-colon-prefix-import
node-colon-prefix-require
nullish-coalescing
object-accessors
object-extensions
object-rest-spread
optional-catch-binding
optional-chain
regexp-dot-all-flag
regexp-lookbehind-assertions
regexp-match-indices
regexp-named-capture-groups
regexp-set-notation
regexp-sticky-and-unicode-flags
regexp-unicode-property-escapes
rest-argument
template-literal
top-level-await
typeof-exotic-object-is-object
unicode-escapes
using

CSS:

hex-rgba
inline-style
inset-property
is-pseudo-class
modern-rgb-hsl
nesting
rebecca-purple

构建目标 Target

Supported by: Build and Transform

这个配置为生成的JavaScriptCSS代码设置了目标环境。它告诉esbuild将对这些环境来说太新的JavaScript语法转换为在这些环境中生效的旧的JavaScript语法。例如??运算符是在Chrome80中引入的,所以esbuild在针对Chrome79或更早版本时会将其转换为等效的(但更详细)条件表达式。

请注意,这只涉及语法功能,而不是API。它不会自动为这些环境未使用的新API添加polyfill。您必须为所需的API显式导入polyfill(例如,导入core-js)。自动polyfill注入不在esbuild的范围内。

每个目标环境都是一个环境名称,后跟一个版本号。当前支持以下环境名称:

  • chrome
  • deno
  • edge
  • firefox
  • hermes
  • ie
  • ios
  • node
  • opera
  • rhino
  • safari

此外,您还可以指定诸如es2020之类的JavaScript语言版本。默认目标是esnext,这意味着默认情况下,esbuild将假定所有最新的JavaScriptCSS功能都得到支持。下面是一个配置多个目标环境的示例。您不需要指定所有这些;您可以指定项目关心的目标环境的子集。如果您愿意,您也可以更精确地指定版本号(例如node12.19.0,而不仅仅是node12):

esbuild app.js --target=es2020,chrome58,edge16,firefox57,node12,safari11

有关在哪些语言版本中引入了哪些语法功能的详细信息,可以参考JavaScript loader文档。请记住,虽然像es2020这样的JavaScript语言版本是按年份确定的,但仅仅是规范批准的年份。这与所有主要浏览器实现该规范的年份无关,而该规范的提出时间通常在该年之前或之后。

如果您使用了esbuild还不支持转换为当前语言目标的语法功能,那么在使用不支持的语法时,esbuild将生成一个错误。例如,在针对es5语言版本时经常会出现这种情况,因为esbuild只支持将大多数较新的JavaScript语法功能转换为es6

如果除了target提供的功能之外,还需要在单个功能级别自定义一组受支持的语法功能,或者替换不需要自定义目标提供的语法功能,你可以使用supported进行配置。

结语

笔者根据esbuild文档搭建了一套简洁的ts开发脚手架工程,编译速度非常快!脚手架还整合了eslint,另一篇文章还附带了调试教程,需要的朋友看这里:esbuild配合vscode搭建的ts开发环境,这编译速度,真香

另外,esbuild中文文档专栏,本人目前正在翻译整理,关注我,有最新的翻译文档会第一时间通知你!

(本文完)

励志前端小黑哥,全网唯一账号!
关注我,带你了解更多前端知识!


http://www.ppmy.cn/news/1125933.html

相关文章

香橙派OrangePi的风扇怎么接

跟树莓派类似,看主板上GPIO口的阵脚定义 树莓派的引脚定义官网:Raspberry Pi Documentation - Raspberry Pi hardware 树莓派的4口和6口可以接一个5V小风扇,4口接正极,6口接负极即可,由于接口相近,可以用于…

RK3588平台开发系列讲解(项目篇)视频监控之RTMP推流

文章目录 一、RTMP协议是什么二、RTMP 的原理三、Nginx 流媒体服务器四、FFmpeg 推流沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 目前常见的视频监控和视频直播都是使用了 RTMP、RTSP、HLS、MPEG-DASH、WebRTC流媒体传输协议等。 视频监控项目组成,分为三部分:…

深入学习计算机组成原理文章体系

大家好,欢迎阅读《计算机组成原理》的系列文章,本系列文章主要教内容是从零学习计算机组成原理,内容通俗易懂,大家好好学习吧!!! 更多的优质内容,请点击以下链接查看哦~~ 序号链接…

十年前对敏捷开发的体会

说明 翻到10年前的旧文,发出来。记录自己的成长。 正文 敏捷开发强调灵活性,适合小而精的团队。许多小公司10年来一直稳定在五个程序员,可能适用。 四大价值观 个体与交互甚于流程与工具。非常适合小而精的团队。沟通的成本正比于人员的平…

省时省力!推荐几款国内高效办公软件

随着信息技术的快速发展,办公室的工作越来越依赖于电脑和互联网。而高效的办公软件也成为了办公室必不可少的工具。今天我们来分享一些国内的高效办公软件品牌,希望对大家有所帮助。 1、J2L3x J2L3x 是一款专为团队通信而设计的工具,旨在将…

【漏洞复现】Jeecg-Boot SQL注入漏洞(CVE-2023-34659)

漏洞描述 jeecgBoot是一款基于BPM的低代码平台!前后端分离架构 SpringBoot 2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发!JeecgBoot引领新低代码开发模式 OnlineCoding-> 代码生…

CentOS 7 安装 Tomcat

CentOS 7 安装 Tomcat(注意版本号要与自己的版本一致) 在/usr/local/下新建文件夹tomcat: cd /usr/local/mkdir tomcatcd tomcat上传tomcat8.5到linux的/usr/local/tomcat下 进入tomcat文件夹下: cd /usr/local/tomcatyum安装…

Spark集成ClickHouse(笔记)

目录 前言: 一.配置环境 1.安装clickhouse驱动 2.配置clickhouse环境 二.spark 集成clickhouse 直接上代码,里面有一些注释哦! 前言: 在大数据处理和分析领域,Spark 是一个非常强大且广泛使用的开源分布式计算框架…