index.html
bun。
terminal
- 自动打包 —— 打包并提供你的 HTML、JavaScript 和 CSS
- 多入口支持 —— 处理多个 HTML 入口点和 glob 入口点
- 现代 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.html在/about
Glob 模式
要指定多个文件,使用以.html 结尾的 glob 模式:
terminal
路径规范化
Bun 从所有文件的最长公共前缀中选择基础路径。terminal
JavaScript、TypeScript 和 JSX
Bun 的转译器原生实现了 JavaScript、TypeScript 和 JSX 支持。参见加载器。Bun 的转译器在运行时也被使用。
ES Modules 和 CommonJS
你可以在 JavaScript、TypeScript 和 JSX 文件中使用 ESM 和 CommonJS。Bun 自动转译和打包它们。 没有预构建或单独的优化步骤。所有操作同时完成。 参见模块解析。CSS
Bun 的 CSS 解析器也是原生实现的(约 70,000 行 Rust 代码)。 它也是一个 CSS 打包器。你可以在 CSS 文件中使用@import 来导入其他 CSS 文件。
例如:
styles.css
在 CSS 中引用本地资源
styles.css
./logo.png 复制到输出目录,并在 CSS 文件中重写路径以包含内容哈希。
styles.css
在 JavaScript 中导入 CSS
要将 CSS 文件与 JavaScript 文件关联,从 JavaScript 文件中导入它。app.ts
./app.css 和 ./app.js 到输出目录。从 JavaScript 导入的所有 CSS 文件都按入口点打包为单个 CSS 文件。如果多个 JavaScript 文件导入同一个 CSS 文件,它在输出 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
示例
给定这个源文件:app.ts
PUBLIC_API_URL=https://api.example.com 运行:
terminal
dist/app.js
将控制台日志从浏览器回显到终端
Bun 的开发服务器可以将控制台日志从浏览器流式传输到终端。要启用此功能,传递--console CLI 标志。
terminal
console.log 或 console.error 都会广播到启动服务器的终端,因此浏览器错误会显示在你运行服务器的同一位置。这也帮助监视终端输出的 AI agent。
内部地,这重用热模块替换(HMR)的现有 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。
build.ts
哪些内容会被处理?
Bun 自动处理所有常见的 Web 资源:- 脚本(
<script src>)由 Bun 的 JavaScript/TypeScript/JSX 打包器处理 - 样式表(
<link rel="stylesheet">)由 Bun 的 CSS 解析器和打包器处理 - 图片(
<img>、<picture>)被复制并哈希 - 媒体(
<video>、<audio>、<source>)被复制并哈希 - 任何具有指向本地文件的
href属性的<link>标签都会被重写为新路径,并进行哈希
原理
这是 Bun 对 JavaScript 中 HTML 导入 支持的一个轻量封装。独立 HTML
你可以将整个前端打包成一个独立的.html 文件,无需外部依赖,使用 --compile --target=browser。所有 JavaScript、CSS 和图片都直接内联到 HTML 中。
terminal
为你的前端添加后端
要为前端添加后端,使用Bun.serve 的 routes 选项。参见全栈文档。