index.html
bun。
terminal
- 自动打包 - 打包并服务你的 HTML、JavaScript 和 CSS
- 多入口支持 - 支持多个 HTML 入口点和通配符入口点
- 现代 JavaScript - 内置支持 TypeScript 和 JSX
- 智能配置 - 读取
tsconfig.json中的路径、JSX 选项、实验性装饰器等配置 - 插件 - 支持 TailwindCSS 等插件
- ESM 与 CommonJS - JavaScript、TypeScript 和 JSX 文件中可同时使用 ESM 和 CommonJS
- CSS 打包与压缩 - 打包
<link>标签和@import语句中的 CSS - 资源管理 - 自动复制并哈希图片和资源;重写 JavaScript、CSS 和 HTML 中的资源路径
单页应用 (SPA)
当你传入一个单一.html 文件给 Bun 时,Bun 会用这个文件作为所有路径的回退路由。这使得它非常适合使用客户端路由的单页应用:
terminal
/about, /users/123 等路由都会返回同一个 HTML 文件,由客户端路由处理导航。
index.html
多页应用 (MPA)
有些项目有几个独立的路由或多个 HTML 文件作为入口点。要支持多个入口点,可以全部传给bun:
terminal
/路由对应index.html/about路由对应about.html
通配符模式
要指定多个文件,可以使用以.html 结尾的通配符模式:
terminal
路径规范化
基路径取所有文件最长的公共前缀。terminal
JavaScript、TypeScript 和 JSX
Bun 的转译器原生支持 JavaScript、TypeScript 和 JSX。你可以在 Bun 中了解更多关于加载器的内容。Bun 的转译器也在运行时使用。
ES 模块与 CommonJS
你可以在 JavaScript、TypeScript 和 JSX 文件中使用 ESM 和 CJS。Bun 会自动处理转译和打包。 无需预先构建或单独优化步骤,全程同步完成。 了解更多 Bun 中的模块解析。CSS
Bun 的 CSS 解析器同样原生实现(大约 58,000 行 Zig 代码)。 它也是一个 CSS 打包器。你可以在 CSS 文件中使用@import 导入其他 CSS 文件。
例如:
styles.css
CSS 中引用本地资源
你可以在 CSS 文件中引用本地资源。styles.css
./logo.png 复制到输出目录,并在 CSS 文件中重写路径以包含内容哈希。
styles.css
在 JavaScript 中导入 CSS
要将 CSS 文件与 JavaScript 文件关联,可以在 JavaScript 中导入它。./app.css 和 ./app.js。所有从 JavaScript 导入的 CSS 文件都会被打包成每个入口点的单个 CSS 文件。如果从多个 JavaScript 文件导入了同一个 CSS 文件,它在输出中仅会包含一次。
插件
开发服务器支持插件。Tailwind CSS
要使用 TailwindCSS,安装bun-plugin-tailwind 插件:
terminal
bunfig.toml:
bunfig.toml
<link> 标签、CSS 中的 @import 或 JavaScript 中导入引用 TailwindCSS。
- index.html
- styles.css
- app.ts
index.html
三者只需其中一个即可,无需全部添加。
内联环境变量
Bun 可以在构建时将 JavaScript 和 TypeScript 文件中的process.env.* 替换为实际的值。这对将配置(如 API URL 或功能开关)注入前端代码非常有用。
开发服务器(运行时)
使用bun ./index.html 时,可在 bunfig.toml 中配置 env 选项以内联环境变量:
bunfig.toml
仅支持直接字面量的
process.env.FOO,不支持 import.meta.env 或间接访问如 const env = process.env; env.FOO。若环境变量未设置,浏览器可能会出现运行时错误,如 ReferenceError: process is not defined。terminal
生产构建
构建静态 HTML 生产版本时,使用env 选项内联环境变量:
- CLI
- API
terminal
示例
给定以下源文件:PUBLIC_API_URL=https://api.example.com 运行:
terminal
将浏览器控制台日志回显至终端
Bun 的开发服务器支持将浏览器中的控制台日志流式传输到终端。 要启用,传入 CLI 参数--console。
terminal
console.log 或 console.error 都会广播到启动服务器的终端。这对于在服务器运行同一终端查看浏览器错误非常有用,也适合监控终端输出的 AI 代理。
内部复用了热模块重载的现有 WebSocket 连接来发送日志。
在浏览器中编辑文件
Bun 的前端开发服务器支持 Chrome DevTools 的自动工作区文件夹功能,可让你在浏览器中保存文件修改。键盘快捷键
服务器运行时:o + Enter- 在浏览器中打开c + Enter- 清除控制台q + Enter或Ctrl+C- 退出服务器
生产构建
准备部署时,使用bun build 创建优化的生产包:
- CLI
- API
terminal
监听模式
你可以运行bun build --watch 自动监听文件变更并重建,非常适合库开发。
你从未见过如此快速的监听模式。
插件 API
需要更灵活的控制?可以通过 JavaScript API 配置打包器,并使用 Bun 内置的HTMLRewriter 预处理 HTML。
处理了哪些内容?
Bun 自动处理所有常见的 Web 资源:- 脚本 (
<script src>) 会进入 Bun 的 JavaScript/TypeScript/JSX 打包器 - 样式表 (
<link rel="stylesheet">) 会进入 Bun 的 CSS 解析器和打包器 - 图片 (
<img>,<picture>) 会复制并哈希处理 - 媒体 (
<video>,<audio>,<source>) 会复制并哈希 - 任何带有指向本地文件
href的<link>标签会被重写路径并哈希
工作原理
这是 Bun 对 JavaScript 中 HTML 导入支持的一个简单封装。给前端添加后端
想给前端添加后端支持, 可以使用Bun.serve 的“routes”选项。
详见全栈文档。