硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

Bun 原生 JavaScript 打包器登场,引入宏

作者:Agazi Mekonnen

  • 2023-07-31
    北京
  • 本文字数:1689 字

    阅读完需:约 6 分钟

Bun原生JavaScript打包器登场,引入宏

最近,Bun 推出了它的快速原生JavaScript打包器,为 Bun 生态系统带来了增强的打包能力。这个新的打包器现在处于测试阶段,提供了一整套功能和工具,简化并加速了构建前端应用程序的过程。此外,Bun 还引入了JavaScript宏,可以在打包时执行 JavaScript 函数,并将其结果直接内联到打包文件中。

 

Bun 是一个用于 JavaScript 和 TypeScript 应用程序的一体化工具包,旨在取代 Node.js。它包含了一个运行快速的 JavaScript 运行时——Bun 运行时,提供了优秀的启动速度和内存使用效率。该工具包作为“bun”可执行文件发布,提供了各种功能,如测试运行器、脚本运行器和包管理器。

 

原生的 Bun 打包器试图简化复杂的 JavaScript 和 TypeScript 打包所面临的挑战,如运行 TypeScript 文件、为生产环境构建和打包代码、处理依赖关系以及启用类似于源映射这样的功能,这些任务通常比较耗时,阻碍了开发速度和效率的提升。

 

打包器提供了几个关键特性。首先,它通过轻量级 Bun 进程快速执行插件,从而缩短打包时间。此外,打包器生成针对 Bun 运行时优化的预编译文件,消除冗余的转换步骤并提高整体执行性能。统一插件 API 允许插件扩展打包器和 Bun 的运行时能力,并提升灵活性和代码重用性。此外,集成打包器和运行时可以无缝传递BuildArtifact对象,可以直接在 HTTP API(如 new Response())中使用。打包器还引入了独立可执行文件生成,允许创建包含 Bun 运行时副本的自包含可执行文件。

 

性能是 Bun 打包器的一个主要关注点。Bun 与 esbuild、Parcel 2、Rollup + Terser 和 Webpack 等流行的打包器的基准比较测试表明,Bun 在速度方面表现出色。Bun 优于这些打包器,其速度提升令人印象深刻,从 1.75 倍到 220 倍不等(根据具体的基准测试而言)。

 

开发人员可以使用 Bun.build()函数或 Bun 的 build CLI 命令轻松构建前端应用程序。API 支持入口点、输出目录、目标(浏览器、Bun 或 node)、格式(esm)、缩小、源映射配置等基本选项。此外,打包器支持摇树优化,以移除无用的代码。开发人员可以借助稳定的插件系统和加载器配置根据自己的具体需求定制打包过程。

 

除了打包器之外,Bun 还引入了 Bun 宏,可以在打包时执行 JavaScript 函数。开发人员可以使用特殊的导入属性语法将函数作为宏导入,将其结果直接内联到打包文件中。宏在打包过程的转换器阶段同步执行,并在多个 JavaScript Worker 之间并行化,确保高效执行。宏有助于在打包时执行获取请求等操作或提升开发者灵活性。

 

出于安全考虑,必须使用{ type: 'macro' }属性显式导入 Bun 宏,确保是有意执行宏,以此来降低潜在的安全风险。也可以使用--no-macros 标志禁用宏,通过完全阻止宏的执行来增加额外的安全层。此外,为了防范恶意包,不能从 node_modules 目录调用宏。这个限制确保宏只在应用程序代码中运行,试图从 node_modules 调用宏将触发特定的错误消息。

 

虽然 Bun 宏提供了增强的代码执行能力,但也存在一些限制。宏的结果必须是可序列化的,以便无缝内联到抽象语法树(AST)中。与 JSON 兼容的数据结构可以全面被支持,但函数和大多数类的实例是不可序列化的。宏只接受在打包时静态、已知的值作为输入。动态值或依赖于运行时条件的值不允许作为宏输入。

 

开发者社区对 Bun 宏存在不同的看法。一位名为 explaininjs 的用户在Hacker News上评论道:

 

“非常好。这应该能够帮助我消除大量笨拙的 webpack/esbuild/etc 垃圾。”

 

另一位用户 skybrian 也表示支持:

 

“我喜欢它不允许在 npm 模块中使用。模块作者可以在他们自己的构建过程中进行任意编译时代码生成。”

 

然而,开源贡献者 goranmoomin 也表达了不同的观点:

 

“宏应该能够对代码执行语法转换。Lisp 因其可以将代码表示为 List 而闻名于世。Rust 的编译器级 API 可以接受节点(token)并运行任意代码,然后吐出新的节点(token)。”

 

Oven(Bun 背后的公司)首席执行官 Jarred Sumner 接受了这些反馈,并提出重新审视宏设计的计划。

 

原文链接

https://www.infoq.com/news/2023/07/bun-native-bundler-macros/

 

相关阅读:

Bun 会是 Webpack 之后的下一件大事吗?

比 Node.js 快三倍,新 JavaScript 运行时 Bun 火了

亲身试用新 JS 运行时 Bun 后,我觉得未来可期

疑为针对最近大火的“Bun”

2023-07-31 09:362874

评论

发布
暂无评论
发现更多内容

【每日学点HarmonyOS Next知识】Web交互、列表拖拽、横屏后布局、Event序列问题、Scroll与Web组合

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】多继承、swiper容器、事件传递、滚动安全区域、提前加载网络图片

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】状态栏控制、片段按钮点击回调、绘制组件、取消按钮与输入框对齐、父调子组件方法

轻口味

HarmonyOS HarmonyOS NEXT

卸载YashanDB服务端

YashanDB

数据库 yashandb

智慧党建系统(源码+文档+讲解+演示)

深圳亥时科技

【每日学点HarmonyOS Next知识】 状态变量、公共Page、可见区域变化回调、接收参数、拖拽排序控件

轻口味

HarmonyOS HarmonyOS NEXT

芯盾时代移动办公融合解决方案

芯盾时代

远程办公 iam 统一身份管理平台

如何租赁LED显示屏:你需要考虑的一切

Dylan

活动 广告 LED显示屏 全彩LED显示屏 led显示屏厂家

如何选择经销商管理系统:8款产品对比

易成研发中心

经销商管理 经销商管理平台 经销商管理系统

AI 大模型本地化部署的调试

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

洗鞋小程序(源码+文档+讲解+演示)

深圳亥时科技

【最新版】计算机二级Python题库及满分代码

大头博士先生

YashanDB字符集配置

YashanDB

数据库 yashandb

培训中心教务系统(源码+文档+讲解+演示)

深圳亥时科技

AI大模型本地化部署的运营

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

【每日学点HarmonyOS Next知识】获取组件尺寸、无埋点方案、海报组件、路由表、文字渐变效果

轻口味

HarmonyOS HarmonyOS NEXT

淘宝图片搜索商品列表API接口全攻略

tbapi

淘宝API 淘宝拍立淘接口 淘宝图片搜索API

VMware ESXi 8.0U2d macOS Unlocker & OEM BIOS 标准版和厂商定制版

sysin

esxi

VMware ESXi 6.7U3v macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版

sysin

esxi

从文件到块: 提高 Hugging Face 存储效率

伤感汤姆布利柏

YashanDB参数配置

YashanDB

数据库

市场业务团队主流使用的 14款项目管理软件推荐

易成研发中心

项目管理 项目管理软件 项目管理系统

大模型本地化部署的应用场景

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

使用 XDP 和 IPVS 实现 QUIC 负载均衡

EMQ映云科技

负载均衡 QUIC协议

AI大模型本地化部署的优化

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

【每日学点HarmonyOS Next知识】列表匀速滑动、判断页面是否在路由栈、导航栏顶部加一条横线、滑动冲突、进度条自定义圆角大小

轻口味

HarmonyOS HarmonyOS NEXT

VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版

sysin

esxi

有必要使用 Oracle 向量数据库吗?

秃头小帅oi

YashanDB实例启停

YashanDB

数据库 yashandb

YashanDB归档管理

YashanDB

数据库 yashandb

降价46%,Hologres Serverless Computing 快速入门

阿里云大数据AI技术

大数据 Serverless hologres 实时湖仓

Bun原生JavaScript打包器登场,引入宏_跨端开发_InfoQ精选文章