Bun v0.6.0 发布,Zig 编写的 JavaScript 运行时

873 阅读2分钟

根据官方说法,Bun 0.6.0 版本是迄今为止 Bun 最大的一个更新版本。

最新版本的 Bun 现在有一个内置的 JavaScript 和 TypeScript 捆绑器和简化器,可以用它来捆绑前端应用程序或将你的代码捆绑成一个独立的可执行文件。

Bun 0.6.0 也一直在忙着提高性能和修复 bug:writeFile() 在 Linux 上的速度提高了 20%、对 Node.js 兼容性和 Web API 兼容性进行了大量的 bug 修复、支持 TypeScript 5.0 语法,并对 bun install 进行了各种修复。

新的 JavaScript bundler & minifier

这个版本的重点是 Bun 的新 JavaScript Bundler(捆绑器),但捆绑器只是一个更大项目的开始。在接下来的几个月里,Bun 将发布 Bun.App—— 一个 "超级 API",将 Bun 的 native-speed 捆绑器、HTTP 服务器和文件系统路由缝合成一个整体。

可以使用 bun build CLI 命令或新的 Bun.build() JavaScript API 来使用。

JavaScript

Bun.build({
  entrypoints: ["./src/index.tsx"],
  outdir: "./build",
  minify: true,
  // ...
});

CLI

bun build ./src/index.tsx --outdir ./build --minify

独立的可执行文件

现在你可以用 bun build 来创建独立的可执行文件。

bun build --compile ./foo.ts

这让你可以将你的应用程序作为一个可执行文件发布,而不需要用户安装 Bun。

你也可以将其缩小,以提高大型应用程序的启动性能:

bun build --minify --compile ./three.ts
  [32ms]  minify  -123 KB (estimate)
  [50ms]  bundle  456 modules
 [107ms] compile  three

这是由 Bun 的新 JavaScript 捆绑器和简化器提供的。

import.meta.main

现在你可以使用 import.meta.main 来检查当前文件是否是启动 Bun 的入口点。这对 CLI 很有用,可以确定当前文件是否是启动应用程序的。

例如,如果你有一个名为 index.ts 的文件:

index.ts

console.log(import.meta.main);

然后你运行它:

$ bun ./index.ts
true

但如果你导入它:

import "./index.ts";

并运行它:

$ bun ./other.ts
false

对 bun test 的改进

  • bun test 现在报告运行测试的时间
  • describe.skip 已经实现
  • 实现了 expect().toBeEven() 和 expect().toBeOdd()

在 Linux 上实现更快的 fs.writeFile

fs.writeFile 在 Linux 上处理大文件的速度提高了 20%

转译器改进

这个版本还引入了许多对转译器的改进。以下是其中的一些亮点:

  • 解析器支持 TypeScript 5.0。
  • 解析器支持导入属性。
  • 一些 npm 包出现了 ReferenceError: Cannot access uninitialized variable 的错误,这是由于 Bun 的转译器中存在循环导入的错误。这一点已被修复。
  • 支持 // @jsx// @jsxImportSource 和 // @jsxFragment 注释
  • ……

更多详情可查看:bun.sh/blog/bun-v0…

原文