Bun.js 教程:快速启动你的 JavaScript 项目
在现代 Web 开发中,速度和效率是至关重要的。传统的 JavaScript 工具链,如 Node.js、npm/yarn、Webpack、Babel 等,虽然功能强大,但往往伴随着复杂的配置和较长的启动时间。这时,一个名为 Bun.js 的新星横空出世,旨在颠覆现状,为 JavaScript 开发带来前所未有的速度体验。
本文将详细介绍 Bun.js 是什么,它为何如此受欢迎,以及如何使用它来快速启动你的 JavaScript 项目。
什么是 Bun.js?
Bun.js 是一个全新的 JavaScript 运行时、打包器、转译器、任务运行器和包管理器,所有这些都内置在一个工具中。它使用 Zig 语言编写,并由 WebKit 的 JavaScriptCore 引擎驱动,而不是 Node.js 使用的 V8 引擎。这使得 Bun 在许多方面都比 Node.js 更快,尤其是在启动时间、模块加载和包管理操作上。
Bun 的目标是提供一个一体化的工具链,简化开发流程,减少配置的复杂性,并显著提高开发效率。
为什么选择 Bun?它的优势在哪里?
选择 Bun 而不是传统的工具链,主要有以下几个原因:
-
极速性能:
- 快速启动: Bun 应用程序的启动速度比 Node.js 快数倍。
- 快速包安装:
bun install的速度远超npm install或yarn install。这得益于其高度优化的 C++ 和 Zig 实现,以及对node_modules结构的原生支持。 - 快速测试: 内置的测试运行器
bun test速度惊人,提供 JSDom 和 Jest 兼容性。 - 快速打包: 内置的打包器(类似 Webpack/Rollup)性能优异,无需额外配置。
-
一体化工具链:
- JavaScript/TypeScript 运行时: 可以直接运行
.js,.ts,.jsx,.tsx文件,无需 Babel 或 swc 进行预转译。 - 包管理器:
bun install、bun add、bun remove,功能与 npm/yarn 类似,但速度更快。 - 打包器: 内置了快速的 JavaScript 和 TypeScript 打包器。
- 测试运行器: 提供了开箱即用的测试功能。
- 文件系统 API: 内置了一些便捷的文件系统操作,例如
Bun.file()用于读取文件。 - WebSocket & HTTP 服务器: 提供了高性能的 HTTP 和 WebSocket 服务器 API,可以直接使用
Bun.serve()。
- JavaScript/TypeScript 运行时: 可以直接运行
-
开发体验优化:
- ESM & CommonJS 兼容: 同时支持 ESM 和 CommonJS 模块。
- 自动加载环境变量: 自动从
.env文件中加载环境变量。 - TypeScript 支持: 原生支持 TypeScript,无需额外配置。
- JSX/TSX 支持: 可以直接运行 JSX/TSX 文件。
如何安装 Bun?
Bun 支持 macOS、Linux 和 WSL。Windows 用户可以通过 WSL 或 Docker 使用 Bun。
通用安装(推荐,适用于 macOS/Linux/WSL):
打开终端并运行以下命令:
bash
curl -fsSL https://bun.sh/install | bash
这将把 Bun 安装到你的 PATH 中。安装完成后,你可以通过运行 bun --version 来验证安装是否成功。
macOS Homebrew 安装:
bash
brew install oven-sh/bun/bun
Windows (WSL):
在 Windows Subsystem for Linux (WSL) 环境中,按照通用安装方式进行。
快速启动你的 JavaScript 项目
现在,让我们通过几个简单的步骤,使用 Bun 快速启动一个 JavaScript 项目。
1. 初始化新项目
首先,创建一个新的项目文件夹并进入该文件夹:
bash
mkdir my-bun-app
cd my-bun-app
然后,使用 bun init 命令初始化项目。它会引导你创建一个 package.json 文件。
bash
bun init
按照提示操作,或者一路回车使用默认值。这会创建一个基本的 package.json 文件和一些示例文件(如 index.ts 或 index.js)。
2. 编写你的第一个 Bun 应用
假设 bun init 为你创建了一个 index.ts 文件。让我们在其中添加一些简单的 TypeScript 代码:
index.ts:
“`typescript
// 导入一个包,例如 express
// 我们稍后会安装它
// import express from ‘express’;
console.log(“Hello from Bun!”);
const add = (a: number, b: number): number => {
return a + b;
};
console.log(2 + 3 = ${add(2, 3)});
// 使用 Bun 的内置 HTTP 服务器
Bun.serve({
port: 3000,
fetch(request: Request): Response | Promise
const url = new URL(request.url);
if (url.pathname === “/”) {
return new Response(“Welcome to Bun! Visit /hello”);
}
if (url.pathname === “/hello”) {
return new Response(“Hello, Bun developer!”);
}
return new Response(“404 Not Found”, { status: 404 });
},
});
console.log(“Bun server listening on http://localhost:3000”);
“`
3. 运行你的应用
要运行 index.ts 文件,只需使用 bun run 或 bun 命令:
“`bash
bun run index.ts
或者更简洁地
bun index.ts
“`
你将看到控制台输出 “Hello from Bun!” 和加法结果,并且服务器开始监听 3000 端口。在浏览器中访问 http://localhost:3000 和 http://localhost:3000/hello,你可以看到相应的响应。
4. 安装和管理依赖
Bun 的包管理器是其最亮眼的特性之一。它与 npm/yarn 兼容,但速度更快。
安装依赖:
假设你想安装 express 和 @types/express:
bash
bun add express @types/express
你会发现依赖安装速度飞快。bun add 也会自动更新 package.json 和 bun.lockb(Bun 的锁定文件,类似于 package-lock.json 或 yarn.lock)。
安装所有依赖(从 package.json):
bash
bun install
移除依赖:
bash
bun remove express
5. 运行脚本
在 package.json 中定义脚本后,你可以像使用 npm 或 yarn 一样运行它们。
package.json:
json
{
"name": "my-bun-app",
"version": "1.0.0",
"scripts": {
"start": "bun run index.ts",
"dev": "bun --watch index.ts",
"test": "bun test"
},
"dependencies": {
// ...
},
"devDependencies": {
// ...
}
}
现在,你可以运行 start 脚本:
“`bash
bun run start
或者
bun start
“`
如果你定义了 dev 脚本并使用 --watch 标志,Bun 会在文件更改时自动重启应用,提供类似 nodemon 的开发体验:
bash
bun dev
6. 编写和运行测试
Bun 内置了开箱即用的测试运行器,兼容 Jest API。
创建一个测试文件,例如 index.test.ts:
index.test.ts:
“`typescript
import { expect, test } from “bun:test”;
const add = (a: number, b: number): number => {
return a + b;
};
test(“add function should correctly add two numbers”, () => {
expect(add(1, 2)).toBe(3);
expect(add(0, 0)).toBe(0);
expect(add(-1, 1)).toBe(0);
expect(add(10, -5)).toBe(5);
});
“`
然后运行测试:
bash
bun test
Bun 会快速执行测试并显示结果。
7. 打包你的应用 (Bundling)
Bun 也可以作为一个 JavaScript 打包器使用,它支持 CommonJS 和 ES Modules,并且内置了对 TypeScript 和 JSX 的支持。
例如,你可以将 index.ts 打包成一个单独的 out.js 文件:
bash
bun build index.ts --out-dir ./dist --target node --sourcemap
--out-dir ./dist:指定输出目录。--target node:指定目标环境为 Node.js (也可以是browser或bun)。--sourcemap:生成 Source Map。
总结
Bun.js 是一款革命性的 JavaScript 工具,它将运行时、包管理器、打包器和测试运行器集成到一个闪电般快速的工具中。无论你是要开始一个新的项目,还是希望优化现有项目的开发体验和性能,Bun 都值得你尝试。
它的出现极大地简化了 JavaScript 开发的复杂性,并为开发者带来了前所未有的速度和效率。现在就开始探索 Bun,体验未来前端/后端开发的极致快感吧!