esbuild中文文档-语法转换(Optimization - Define、Drop、Drop labels)

文章目录

  • 优化配置 Optimization
    • Define
    • Drop
    • Drop labels
  • 结语

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

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

esbuild简单介绍

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

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

优化配置 Optimization

Define

Supported by: Build and Transform

此功能提供了一种用常量表达式替换全局标识符的方法。它可以在不更改代码本身的情况下,在构建过程中更改某些代码的行为:

$ echo 'hooks = DEBUG && require("hooks")' | esbuild --define:DEBUG=true
hooks = require("hooks");$ echo 'hooks = DEBUG && require("hooks")' | esbuild --define:DEBUG=false
hooks = false;

每个define条目都将标识符映射到包含表达式的代码字符串。字符串中的表达式必须是JSON对象(null、boolean、数字、字符串、数组或对象)或单个标识符。数组和对象以外的替换表达式是内联替换的,这意味着它们可以参与常量折叠。数组和对象替换表达式存储在变量中,然后使用标识符引用,而不是内联替换,这避免了替换值的重复副本,但意味着值不参与常量折叠。

如果您想用字符串文字替换某些内容,请记住,传递给esbuild的替换值本身必须包含引号,因为每个定义条目都映射到一个包含代码的字符串。省略引号意味着替换值是一个标识符。下面的示例演示了这一点:

$ echo 'id, str' | esbuild --define:id=text --define:str=\"text\"
text, "text";

如果您使用的是CLI,请记住,不同的shell对于如何转义双引号字符有不同的规则(当替换值是字符串时,这是必要的)。使用\“反斜杠转义,因为它在bashWindows命令提示符下都有效。其他在bash中有效的转义双引号的方法(如用单引号括起来)在Windows上不起作用,因为Windows命令提示符不会删除单引号。当从package.json文件中的npm脚本使用CLI时,这一点很重要,因为我们希望它在所有平台上都能使用:

{"scripts": {"build": "esbuild --define:process.env.NODE_ENV=\\\"production\\\" app.js"}
}

如果您仍然在不同的shell中遇到跨平台转义问题,您可能需要改用JavaScript API。在那里,您可以使用常规的JavaScript语法来消除跨平台的差异。

如果您正在寻找一种更高级的define功能,它可以用常数以外的东西来替换表达式(例如,用填充码shim替换全局变量),那么您可以使用类似的注入功能inject来实现这一点。

Drop

Supported by: Build and Transform

这个命令告诉esbuild在生成之前编辑源代码以删除某些结构体。目前有两种可能被丢弃的东西:

  • debugger

传递此标志将从输出中删除所有debugger语句。这类似于流行的UglifyJSTerser JavaScript minifiers程序中的drop_debug:true标志。

JavaScriptdebugger语句使活动调试器将该语句视为自动配置的断点。当调试器打开时,包含此语句的代码将自动暂停。如果没有打开任何调试器,则该语句将不执行任何操作。从代码中删除这些语句只会防止调试器在代码运行时自动停止。

您可以像这样删除调试器语句:

esbuild app.js --drop:debugger
  • console

传递此标志将从输出中删除所有控制台的API调用。这类似于流行的UglifyJSTerser JavaScript minifiers程序中的drop_console:true标志。

警告:使用此标志可能会在代码中引入错误!此标志将删除包括所有调用参数在内的整个调用表达式。如果这些参数中的任何一个有重要的副作用,那么使用此标志将更改代码的行为。使用此标志时要非常小心。

如果你想删除控制台API调用而不删除有副作用的参数(这样你就不会引入bug),你应该将相关的API调用标记为纯调用。例如,您可以使用--pure:console.logconsole.log标记为纯函数调用。这可以在启用压缩时安全地删除这些API调用。

删除控制台API调用,如下所示:

esbuild app.js --drop:console

Drop labels

Supported by: Build and Transform

此配置项会告诉esbuild在生成编辑源代码之前,删除具有特定标签名称的标签语句labeled statements。例如,考虑以下代码:

function example() {DEV: doAnExpensiveCheck()return normalCodePath()
}

如果使用此选项删除所有名为DEV的标签,那么esbuild将为您提供以下信息:

function example() {return normalCodePath();
}

您可以这样配置此功能(比如删除DEVTEST标签):

esbuild app.js --drop-labels=DEV,TEST

请注意,这并不是删除代码的唯一方法。另一种更常见的方法是使用define功能将特定的全局变量替换为布尔值。例如,考虑以下代码:

function example() {DEV && doAnExpensiveCheck()return normalCodePath()
}

如果您将DEV定义为false,那么esbuild将为您提供以下信息:

function example() {return normalCodePath();
}

这和使用标签label功能差不多。然而,使用标签而不是全局变量来有条件地删除代码的一个优点是,您不必担心因为有人忘记配置esbuild来替换代码,从而导致全局变量没有被定义。使用标签方法的一些缺点是,当标签没有被丢弃时,它会使代码变得更难阅读,而且它不适用于嵌套表达式中的代码。在一个特定的项目中使用哪种方法取决于个人偏好。

结语

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

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

(本文完)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143064.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

PHP8的类与对象的基本操作之类的实例化-PHP8知识详解

定义完类和方法后,并不是真正创建一个对象。类和对象可以描述为如下关系。类用来描述具有相同数据结构和特征的“一组对象”,“类”是“对象”的抽象,而“对象”是“类”的具体实例,即一个类中的对象具有相同的“型”,…

【DETR】

https://tianfeng.space/ 前言 论文 代码 DETR(Data-efficient Image Transformer)是一种用于目标检测任务的深度学习模型。它与传统的目标检测方法不同,采用了Transformer架构,将目标检测问题转化为一个序列到序列的问题。以下…

Java之IO流概述

1.1 什么是IO 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrls ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键…

【数据库——MySQL】(10)视图和索引

目录 1. 视图1.1 创建视图1.2 查询视图 2. 索引2.1 索引的分类2.2 索引的建立 参考书籍 1. 视图 1.1 创建视图 基础语法: CREATE [OR REPLACE] VIEW 视图名[(列名表)]ASSELECT语句[WITH CHECK OPTION]说明: 在默认情况下,将在当前数据库创…

Linux 用户 用户组管理

用户 Linux系统是一个多用户多任务的分时操作系统,任何要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后&a…

华为ICT——第二章-数字图像处理私人笔记

目录 1:计算机视觉:​编辑 2:计算机视觉应用:​编辑 3:计算机视界核心问题:​编辑 4:相关学科: 5:计算机视觉与人工智能: 最成熟的技术方向是图像识别 6…

【面试算法——动态规划 20】最长公共子序列 不相交的线

1143. 最长公共子序列 链接: 1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字…

Spring面试题8:面试官:说一说Spring的BeanFactory

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的BeanFactory Spring的BeanFactory是Spring框架的核心容器,负责管理和创建Bean对象。它是一个工厂类,用于实例化、配置和管理Bean的…

SpringBoot 如何使用 Druid 进行数据库连接池管理

使用 Druid 进行数据库连接池管理的 Spring Boot 应用 数据库连接池是任何Web应用程序的重要组成部分,它们有助于管理数据库连接的复用,提高性能和资源利用率。Druid是一个强大的数据库连接池,它具有监控、防SQL注入、快速、可扩展等特点。在…

谈谈最近招人的感受!

最近折腾新的项目,面试了很多实习生小伙伴,我说说我的一些「面试」感受, 虽然是一个老生常谈的话题,但是依然提一下。 准时很重要:提前一点时间,踩个点,别迟到,面试的过程中由于每个…

低功耗引擎Cliptrix为什么可以成为IOT的高效能工具

在万物互联的时代,现代人已普遍接受电视、音箱等电器设备具备智能化能力,也是在这个趋势下,我们身边越来越多的iOT设备联网和交互成为刚需。 但iot设备也面临到一些非常显著的痛点,例如iot设备的内存、处理器等核心元件无法与手机…

爬虫 — 多线程

目录 一、多任务概念二、实现多任务方式1、多进程 (Multiprocessing)2、多线程(Multithreading)3、协程(Coroutine) 三、多线程执行顺序四、多线程的方法1、join()2、setDaemon()3、threading.enumerate() …

python运算函数

简 python输入输出函数input() :用户用于读取键盘输入的函数,返回值为“string”类型 运算函数abs(x) :x的绝对值int(x) :将x转换成整型(截掉小数部分)float(x):浮点数divmod(x,y):返回(x//y,x%y)complex(re,im):返回一…

linux部署页面内容

/bin:该目录包含了常用的二进制可执行文件,如ls、cp、mv、rm等等。 /boot:该目录包含了启动Linux系统所需的文件,如内核文件和引导加载程序。 /dev:该目录包含了所有设备文件,如硬盘、光驱、鼠标、键盘等等…

Scoket网络编程

1.首先来的个简单示例: 客户端: using System; using System.Net.Sockets; using System.Net; using System.Text;namespace Client {internal class Program{static void Main(string[] args){Console.WriteLine("Client");// 创建一个Socket并连接到服…

windows11 cmd使用python没有反应, windows11使用python跳应用商店

1. 修改系统变量位置,右击我的电脑,选择属性: 点击环境变量,找到path: 将python 的path移到windowsapp 上侧 保存退出。重新打开cmd,输入命令python -v

网络通信(套接字通信)(C/C++)

1.网络编程必知概念 1.广域网和局域网 广域网:又称外网、公网。是连接不同地区局域网或城域网进行计算机通信的远程公共网络。 局域网:在一定的通信范围内,有很个多计算机组成的私有网络就叫局域网。(这些计算机相互之间是可以通信的,但是不能直接访问外网(可以通过网线…

虹科方案 | LIN/CAN总线汽车零部件测试方案

文章目录 摘要一、汽车零部件测试的重要性?二、虹科的测试仿真工具如何在汽车零部件测试展露头角?三、应用场景**应用场景1:方向盘开关的功能测试****应用场景2:各类型电机的控制测试****应用场景3:RGB氛围灯的功能测试…

CISSP,你值得拥有(我的学习之路)

(只分享三点:怎么学、怎么练、怎么考。) 我为啥去考CISSP 我是个在信安行业摸爬滚打将近20年的老油条,知道CISSP这个认证是很早前的事情了,但一直以来都觉得它有点难,加上人又懒得要命,也就始…

安装elasticsearch

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net 1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。 课前资料提…