4 月 2 日,Jarred Sumner 宣布 Bun 1.1 正式推出。Bun 是一个快速、一体化的工具包,用于运行、构建、测试和调试 JavaScript 和 TypeScript,从单个脚本到全栈应用程序。如果您是 Bun 的新手,可以在 Bun 1.0 博客文章中了解更多信息。
Bun 1.1 是一个巨大的更新。自 Bun 1.0 以来已有超过 1700 次提交,开发团队一直在努力使 Bun 更加稳定并与 Node.js 更加兼容。现在,Bun 正式支持 Windows 系统。
Windows 支持
您现在可以在 Windows 10 及更高版本上运行 Bun!这对我们来说是一个巨大的里程碑,我们很高兴将 Bun 带给全新的开发团队。
Windows 上的 Bun 通过了我们自己的 macOS 和 Linux 上的 Bun 测试套件的 98%。这意味着从运行时、测试运行器、包管理器到捆绑器的所有内容 - 都可以在 Windows 上运行。
要开始在 Windows 上使用 Bun,请在终端中运行以下命令:
powershell -c "irm bun.sh/install.ps1 | iex"
Windows 上的 bun install
Bun 有一个内置的、与 npm 兼容的包管理器,用于安装包。安装 Vite React App 时, bun install 在 Windows 上的运行速度比 yarn 快 18 倍,比 npm 快 30 倍。
Windows 上的 bun run
您还可以使用 bun run 运行脚本,这是 npm run 的更快替代方案。为了使 bun run 在 Windows 上更快,我们设计了一种新的文件格式:.bunx
。
.bunx
文件是一个跨文件系统符号链接,能够使用 Bun 或 Node.js 启动脚本或可执行文件。最终结果是 bun run 比 npm run 快 11 倍,而 bunx 也比 npx 快 11 倍。
即使您只使用 Bun 作为包管理器而不是运行时, .bunx 也可以与 Node.js 一起使用。这也解决了恼人的“终止批处理作业?” Windows 开发人员在向正在运行的脚本发送 ctrl-c 时习惯使用的提示。
Windows 上的 bun --watch
Bun 内置支持 --watch 模式。这为您提供了在进行更改和让这些更改影响您的代码之间的快速迭代周期。在 Windows 上,我们确保优化 control-s 和进程重新加载之间所需的时间。
Windows 上的 Node.js API
我们还花时间优化 Node.js API,以使用 Windows 上最快的系统调用。例如,Bun 上的 fs.readdir() 比 Windows 上的 Node.js 快 58%。
虽然我们尚未优化每个 API,但如果您发现 Windows 上某些内容比 Node.js 慢,请提出问题,我们将找出如何使其更快的方法。
JavaScript 运行时
与我们自 Bun 1.0 以来所做的数十项新功能、API 和改进相比,Windows 支持只是一件轶事。
- 大型项目启动速度提高 2 倍
- Bun Shell
- Bun.Glob
- Bun.Semver
- Bun.stringWidth()
- server.url
- server.requestIP()
- subprocess.resourceUsage()
- import.meta.env
Node.js 兼容性
Bun 的目标是成为 Node.js 的直接替代品。
Node.js 兼容性仍然是 Bun 的首要任务。我们对 Bun 对 Node.js API 的支持进行了大量改进和修复。这儿是一些精彩片段:
- HTTP/2 客户端
- Date.parse() 与 Node.js 兼容
- 递归 fs.readdir()
- Bun 和 Node.js 之间的 IPC 支持
- 未记录的 Node.js API
Web API 支持
Bun 还支持 Web 标准 API,包括 fetch() 和 Response 。这使得编写在浏览器和 Bun 中都有效的代码变得更加容易。
自 Bun 1.0 以来,我们对 Web API 进行了大量改进和修复。
- WebSocket 稳定
- performance.mark()
- fetch() 使用 Brotli 压缩
- URL.canParse()
- fetch() 通过 Unix 套接字
- Response 主体作为 AsyncIterator
- 已实现 console.table()、console.timeLog()
- 在 TextEncoder 中支持 ignoreBOM
包管理器
即使您不使用 Bun 作为运行时,您仍然可以使用 bun install 作为包管理器。 Bun 是一个与 npm 兼容的包管理器,安装包的速度比 npm 快 29 倍。
从 Bun 1.0 开始,我们显着提高了 bun install 的稳定性和性能。我们修复了数百个错误,添加了新功能,并改善了整体开发人员体验。
JavaScript 打包器
Bun 是一个 JavaScript 和 TypeScript 打包器、转译器和压缩器,可用于打包浏览器、Node.js 和其他平台的代码。
Bun 可以使用 --target=node
标志捆绑代码以在 Node.js 上运行。在 Bun 1.0 中,有几个错误导致其无法正常工作,例如无法请求 node:fs 和 node:path 等内置模块。在 Bun 1.1 中,这些错误现已得到修复。
Bun 可以使用 --compile 标志将 TypeScript 和 JavaScript 文件编译为单个文件可执行文件。在 Bun 1.1 中,您还可以嵌入 NAPI (n-api) 插件 .node 文件。这对于捆绑原生 Node.js 模块非常有用,例如 @anpi-rs/canvas 。然后,您可以将应用程序编译并作为单文件可执行文件运行。
Bun 有一个强大的宏系统,允许您在编译时转换代码。宏可用于生成代码、优化代码,甚至在编译时运行代码。在 Bun 1.1 中,您现在可以在捆绑时导入内置模块。
测试运行器
Bun 有一个内置的测试模块,可以轻松地用 JavaScript、TypeScript 和 JSX 编写和运行测试。它支持与 Jest 相同的 API,其中包括 expect() 样式的 API。
SQLite 支持
从 1.0 开始,Bun 就内置了对 SQLite 的支持。它有一个受 better-sqlite3 启发的 API,但它是用本机代码编写的,速度更快。从那时起,bun:sqlite
出现了许多新功能和改进。
开发者体验
我们花了很多时间思考 Bun 的开发者体验。我们希望能够轻松编写、运行和调试 JavaScript 和 TypeScript 代码。对命令、输出和错误消息进行了大量改进,使 Bun 更易于使用。
当 Bun 中抛出错误时,它会通过多行源代码预览将堆栈跟踪打印到控制台。现在,源代码预览会突出显示语法,这使其更易于阅读。
来自 Error.stack 的堆栈跟踪现在包含更少的噪音,例如与错误无关的内部函数。这样可以更轻松地查看错误发生的位置。
快速入门
就是这样——这就是 Bun 1.1,而这对于 Bun 来说还只是一个开始。
我们使 Bun 更快、更可靠,修复了数千个错误,添加了大量新功能和 API,现在 Bun 支持 Windows。首先,请在终端中运行以下任意命令。
# curl
curl -fsSL https://bun.sh/install | bash
# powershell
powershell -c "irm bun.sh/install.ps1 | iex"
# npm
npm install -g bun
# brew
brew tap oven-sh/bun
brew install bun
# docker
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun