Bun 是一个用于 JavaScript 和 TypeScript 应用程序的一体化工具包。它作为一个名为 bun 的可执行文件提供。

其核心是 Bun 运行时,这是一个快速的 JavaScript 运行时,旨在替代 Node.js。它是用 Zig 编写的,并由 JavaScriptCore 提供支持,大大减少了启动时间和内存使用量。

<span><span>bun run index.tsx  </span><span># TS and JSX supported out of the box</span></span>

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

<span><span>bun run start                 </span><span># run the `start` script</span></span>
<span><span>bun install </span><span>&lt;</span><span>pkg</span><span>&gt;</span><span>             </span><span># install a package</span></span>
<span><span>bun build ./index.tsx         </span><span># bundle a project for browsers</span></span>
<span><span>bunx cowsay </span><span>'</span><span>Hello, world!</span><span>'</span><span>   </span><span># execute a package</span></span>

Bun 仍在开发中。使用它可以加快您的开发工作流程或在资源受限的环境(例如无服务器函数)中运行更简单的生产代码。我们正在致力于与现有框架实现更完整的 Node.js 兼容性和集成。加入 Discord 并观看 GitHub 存储库以密切关注未来的版本。

从下面的快速链接之一开始,或继续阅读以了解有关 Bun 的更多信息。

什么是运行时?

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

但大多数 JavaScript 程序并不是在真空中运行。他们需要一种访问外部世界来执行有用任务的方法。这就是运行时的用武之地。它们实现了额外的 API,然后这些 API 可供它们执行的 JavaScript 程序使用。

  浏览器

值得注意的是,浏览器附带的 JavaScript 运行时实现了一组通过全局 window 对象公开的特定于 Web 的 API。浏览器执行的任何 JavaScript 代码都可以使用这些 API 在当前网页的上下文中实现交互或动态行为。

Node.js

同样,Node.js 是一个 JavaScript 运行时,可以在非浏览器环境(例如服务器)中使用。 Node.js 执行的 JavaScript 程序除了内置的之外还可以访问一组 Node.js 特定的全局变量,例如 Bufferprocess__dirname 用于执行操作系统级任务的模块,例如读/写文件( node:fs )和网络( node:netnode: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,例如 fetchWebSocketReadableStream 。 Bun 由 Apple 为 Safari 开发的 JavaScriptCore 引擎提供支持,因此一些 API 如 HeadersURL 直接使用 Safari 的实现。
  • Node.js 兼容性。除了支持 Node 风格的模块解析之外,Bun 还旨在与内置 Node.js 全局变量( processBuffer )和模块( path )完全兼容、 fshttp 等)这是一项正在进行的工作,尚未完成。请参阅兼容性页面了解当前状态。

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