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.mzph.cn/news/88846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow web入门(21-28爆破)

web21 抓包 进行了base64加密,解码后发现账号和密码格式是 账号:密码 爆破 位置一开始选错了,应该是不含Basic的 模式选择custom iterator(自定义迭代器) 自定义迭代器可以自定义拼接方式 分别设置三个位置,第一个位置为admin 第二个位置…

RHCE---Linux的计划任务

文章目录 目录 文章目录 前言 一.单一执行的例行性工作 at 命令 二.循环执行的例行性工作 crontab 命令 课后作业: 思维导图 前言 如果想要让自己设计的备份程序可以自动地在系统下面运行,而不需要手动来启动它,这是该如何处理&#xff1f…

DC/DC开关电源学习笔记(九)Buck降压拓扑原理

(九)Buck降压拓扑原理 1.概述2. Buck降压原理3. Buck电路的三种工作模式3.1 CCM3.2 BCM3.3 DCM4. 伏秒法则1.概述 Buck电路属于非隔离的直流变换器,在开关电源中广泛应用,BUCK电路是一种基于电感储能原理的DC-DC变换器,其涉及到物理中的电磁感应和电能转换的基本原理。在…

Cesium 问题:加载 geojson 数据量大浏览器会崩,使用primitive方式加载

文章目录 问题分析 问题 之前加载geojson数据都是使用dataSource和entity的方式,但是当数据量大时,浏览器就会崩掉:提示浏览器内存不足,已暂停渲染 分析 使用primitive方式加载数据,可以提高加载渲染效率。实现方法…

威胁追踪如何增强您的网络安全态势

网络威胁的复杂性、频率和影响正在加剧。2022 年,勒索软件攻击达到2.361 亿次,其中 39% 的英国企业遭受网络攻击。 这些攻击需要工具和资源来识别和纠正漏洞,以在云环境中维护强大的安全框架,从而降低数据泄露和合规违规的风险。…

asp.net core automapper的使用

1.安装automapper的nuget包 AutoMapper.Extensions.Microsoft.DependencyInjection 2.创建需要映射的类和转换后的类 public class studto{public int sn { get; set; }public string name { get; set; }public string sex { get; set; }public int age { get; set; }public s…

mac 配置 httpd nginx php-fpm 详细记录 已解决

在日常mac电脑 开发php项目一直是 httpd 方式 运行,由于有 多版本 运行的需求,docker不想用,索性用 php-fpm进行 功能处理。上次配置 是好的,但是感觉马马虎虎,这次 配置底朝天。因为配置服务器,几乎也都是…

List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)

系列文章目录 SpringBootVue3实现登录验证码功能 Java实现发送邮件(定时自动发送邮件) 换个角度使用Redis去解决跨域存取Session问题 Redis缓存穿透、击穿、雪崩问题及解决方法 Spring Cache的使用–快速上手篇 更多该系列文章请查看我的主页哦 文章目录…

游戏技术亮点|Aavegotchi 与 GameSwift 建立合作伙伴关系

构建一个优秀的游戏只是成功发布的一部分,让数百万玩家体验这款游戏才是真正的乐趣所在。 这也是为什么我们很高兴宣布与 GameSwift 建立了新的合作伙伴关系,GameSwift 是一款先进的模块化游戏区块链,采用 zkEVM 技术构建,是全球…

实现窗口屏幕居中的C++代码源码(考虑任务栏)

本篇文章属于《518抽奖软件开发日志》系列文章的一部分。 我在开发《518抽奖软件》(www.518cj.net)的时候,需要对话框居中的功能。对话框默认是居中的,但是要移动对话框到第二屏并居中,所以要自己实现代码。通过关键函…

切割VOC的图像和他的标签

切割VOC的图像 背景代码 背景 图像及对应xml文件切割 需要将图像切分为819,819的子图像 代码 import os import xml.etree.ElementTree as ET from PIL import Imagedef crop_one_image_and_xml(image_path, annotation_path, output_path, filename):# -*- coding: encoding…

[Zer0pts2020]Can you guess it? basename特性 和preg_match 绕过

直接就可以进入看看源代码 原本以为这道题目有两个方法来做 但是 后面发现第二个没有找到漏洞 这里考点主要就是 正则和 basename的特性 首先就是正则 现在出现一个知识点 就是 /index.php/config.php 这种路径 访问的还是 index.php 我们可以试试看 还是在index.php中过…

瀑布流 - Vue3基于Grid布局简单实现一个瀑布流组件

瀑布流 - Vue3基于Grid布局简单实现一个瀑布流组件 前言 在学习Grid布局之时,我发现其是CSS中的一种强大的布局方案,它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,在刷某书和某宝首页时&…

基于微信小程序的明星应援小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

解决方案(二)三方数据同步

三方数据同步 场景方案设计 场景 当接入第三方系统时,可能涉及到同步第三方的数据;如果第三方有主动推送机制还好,可以直接接收推送消息。 但是,有的系统并没有主动推送机制;还有即使有推送,可能也有各种…

golang工程——常用数据结构底层原理【mao、slice、func、string】

字符串 其实就是字符数组 注意 字节数组与字符串可以相互转换 a : "hello world" b : []byte(a) c : string(b)字节数组转换为字符串在运行时调用了slicebytetostring函数。需要注意的是,字节数组与字符串的相互转换并不是简单的指针引用,…

【实战详解】如何快速搭建接口自动化测试框架?Python + Requests

摘要: 本文主要介绍如何使用Python语言和Requests库进行接口自动化测试,并提供详细的代码示例和操作步骤。希望能对读者有所启发和帮助。 前言 随着移动互联网的快速发展,越来越多的应用程序采用Web API(也称为RESTful API&…

分类预测 | Matlab实现GA-RF遗传算法优化随机森林多输入分类预测

分类预测 | Matlab实现GA-RF遗传算法优化随机森林多输入分类预测 目录 分类预测 | Matlab实现GA-RF遗传算法优化随机森林多输入分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GA-RF遗传算法优化随机森林多输入分类预测(完整源码和数据&…

如何进一步全面提高项目估算精准度?

项目估算非常重要,这直接关系着项目的成本和收入,如果估算不准确,将为项目带来较大风险。一般软件规模可以用多种方式进行估算,但是用功能点估算方式更准确,而自动估算让估算更快速,我们以CoCode开发的估算…

【Go】rsrc不是内部或外部命令、无法将“rsrc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方法

前言 想尝试用go创建一个桌面应用程序,然后查了下决定用 walk。 我们要先下载walk,这里 官方链接 按照官方文档,我们先用go get命令下载。 go get github.com/lxn/walk然后分别创建好了 main.go、main.manifest 文件,代码如下…