Bun发布原生打包工具并引入宏功能

Bun 发布原生 JavaScript 打包工具

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

Bun 的定位

Bun 是一个旨在替代 Node.js 的 JavaScript 和 TypeScript 应用一体化工具包。它包括一个快速的 JavaScript 运行时——Bun 运行时,提供了更快的启动时间和更低的内存占用。该工具包以一个名为“bun”的单一可执行文件形式发布,并提供了多种功能,如测试运行器、脚本运行器和包管理器。

原生打包工具的功能

Bun 的原生打包工具试图简化复杂的 JavaScript 和 TypeScript 打包挑战,例如运行 TypeScript 文件、为生产环境构建和打包代码、处理依赖关系以及启用诸如 sourcemap 等功能。这些任务通常耗费时间,影响开发速度和效率。

关键特性

  1. 快速插件执行:通过轻量级的 Bun 进程,实现更快的打包速度。
  2. 预编译文件生成:生成针对 Bun 运行时优化的预编译文件,减少冗余的编译步骤,提升执行性能。
  3. 统一的插件 API:允许插件扩展打包工具和 Bun 运行时的能力,增强灵活性和代码复用性。
  4. 无缝集成运行时:支持直接传递 BuildArtifact 对象,这些对象可以用于 HTTP API 如 new Response()
  5. 独立可执行文件生成:支持生成包含 Bun 运行时的自包含可执行文件。

性能表现

Bun 打包工具在性能上表现出色。与 esbuild、Parcel 2、Rollup + Terser 和 Webpack 等流行打包工具相比,Bun 的速度优势显著,速度提升范围从 1.75 倍到 220 倍不等,具体取决于测试场景。

开发者体验

开发者可以使用 Bun.build() 函数或 Bun build CLI 命令轻松构建前端应用。API 支持关键选项,如入口点、输出目录、目标(浏览器、Bun 或 node)、格式(esm)、代码压缩、sourcemap 配置等。此外,打包工具还支持 tree-shaking 以移除无用代码。通过稳定的插件系统和加载器配置,开发者可以根据特定需求定制打包过程。

Bun 宏

Bun 宏允许 JavaScript 函数在打包时执行,开发者可以通过特殊的导入属性语法将函数作为宏导入,并将其结果直接内联到打包文件中。宏在打包过程的编译阶段同步运行,并通过多个 JavaScript 工作线程并行化,确保高效执行。宏可以用于在打包时发起 fetch 请求或增强开发者灵活性。

安全考虑

  • 显式导入:宏必须通过 { type: 'macro' } 属性显式导入,以确保其执行是故意的,并减少潜在的安全风险。
  • 禁用宏:使用 --no-macros 标志可以完全禁用宏的执行,增加安全性。
  • 限制调用:宏不能从 node_modules 目录中调用,以防止恶意包的潜在风险。尝试从 node_modules 调用宏会触发特定错误信息。

宏的局限性

  • 结果可序列化:宏的结果必须是可序列化的,以便无缝内联到抽象语法树(AST)中。JSON 兼容的数据结构完全支持,但函数和大多数类的实例不可序列化。
  • 静态输入:宏只能接受在打包时静态已知的输入值,动态值或依赖运行时条件的值不允许作为宏输入。

开发者社区的反馈

Bun 宏在开发者社区中引发了不同的意见。一些开发者对其简化开发流程的能力表示赞赏,而另一些开发者则认为宏应该支持更复杂的代码转换功能。Bun 的 CEO Jarred Sumner 表示,他们将重新审视宏的设计,以进一步改进其功能。

总结

Bun 的原生打包工具和宏功能为 JavaScript 和 TypeScript 开发者提供了强大的工具,显著提升了打包效率和开发灵活性。尽管宏功能在社区中引发了不同的意见,但其潜力不可忽视,未来的改进将进一步增强其适用性。

阅读 23
0 条评论