开发、测试、运行和打包 JavaScript 和 TypeScript 项目——全部使用 Bun。Bun 是一个全能的 JavaScript 运行时和工具包,旨在提高速度,包含一个打包器、测试运行器和与 Node.js 兼容的包管理器。

安装 Bun

curl -fsSL https://bun.sh/install | bash

Bun 是一个全能的 JavaScript 和 TypeScript 应用程序工具包。它以一个名为 bun 的单一可执行文件的形式提供。

其核心是 Bun 运行时,它是一个快速的 JavaScript 运行时,旨在作为 Node.js 的替代品。它使用 Zig 编写,并在底层使用 JavaScriptCore 提供支持,从而显著减少启动时间和内存使用量。

  1. bun run index.tsx

bun 命令行工具还实现了一个测试运行器、脚本运行器和与 Node.js 兼容的包管理器,所有工具都比现有工具快得多,并且可以在现有的 Node.js 项目中使用,几乎不需要进行任何更改。

  1. bun run start # 运行 `start` 脚本
  2. bun install <pkg> # 安装一个包
  3. bun build ./index.tsx # bundle a project for browsers
  4. bun test # run tests
  5. bunx cowsay "Hello, world!" # execute a package

Bun 仍在开发中。使用它来加快您的开发工作流程或在像无服务器函数这样的资源受限环境中运行更简单的生产代码。我们正在努力实现更完整的 Node.js 兼容性,并与现有框架集成。加入 Discord 并查看 GitHub 存储库以跟踪未来的发布。

什么是运行时 runtime

JavaScript(或更正式地称为 ECMAScript)只是一种编程语言的规范。任何人都可以编写一个 JavaScript 引擎,它可以摄取有效的 JavaScript 程序并执行它。今天使用的两种最流行的引擎是 V8(由 Google 开发)和 JavaScriptCore(由 Apple 开发)。两者都是开源的。

浏览器

但是,大多数 JavaScript 程序并不是在真空中运行的。它们需要一种方式来访问外部世界以执行有用的任务。这是运行时发挥作用的地方。它们实现了额外的 API,然后提供给它们所执行的 JavaScript 程序。值得注意的是,浏览器附带了实现一组特定于 Web 的 API 的 JavaScript 运行时,这些 API 通过全局 window 对象公开。任何由浏览器执行的 JavaScript 代码都可以使用这些 API 来实现当前网页上下文中的交互式或动态行为。

Node.js

同样,Node.js 是一个 JavaScript 运行时,可以用于非浏览器环境,例如服务器。由 Node.js 执行的 JavaScript 程序除了内置模块外,还具有一组特定的 Node.js 全局变量,如 Buffer、process 和 __dirname,以及用于执行操作系统级任务的内置模块,如读取/写入文件( node:fs )和网络( node:net 、node:http )。Node.js 还实现了基于 CommonJS 的模块系统和解析算法,该算法比 JavaScript 的本地模块系统还要早。

Bun 被设计为更快、更精简、更现代的 Node.js 替代品。

设计目标

Bun 是从头开始设计,考虑了当今的 JavaScript 生态系统。

  • 速度。Bun 的处理启动速度比 Node.js 快 4 倍(自己试试!)

  • TypeScript & JSX 支持。您可以直接执行 .jsx、.ts 和 .tsx 文件;Bun 的转换器在执行之前将这些文件转换为原生 JavaScript。

  • ESM & CommonJS 兼容性。世界正在向 ES 模块(ESM)发展,但 npm 上的数百万个包仍需要 CommonJS。Bun 推荐使用 ES 模块,但也支持 CommonJS。

  • Web-标准 API。Bun 实现了标准的 Web API,如 fetch、WebSocket 和 ReadableStream。Bun 由 Apple 开发的 JavaScriptCore 引擎提供支持,因此一些 API(如 Headers 和 URL)直接使用 Safari 的实现。 Node.js 兼容性。除了支持 Node-style 模块解析外,Bun 还旨在与内置的 Node.js globals(process、Buffer)和模块(path、fs、http 等)完全兼容。这是一个正在进行的工作,尚未完成。请参阅兼容性页面以了解当前状态。

Bun 不仅仅是一个运行时。长期目标是成为使用 JavaScript/TypeScript 构建应用程序的统一、基础设施工具包,包括包管理器、转换器、打包器、脚本运行器、测试运行器等等。