.js .cjs .mjs .mts .cts .ts .tsx .jsx .css .json .jsonc .json5 .toml .yaml .yml .txt .wasm .node .html .sh
Bun 使用文件扩展名来选择解析文件的内置 加载器。每个加载器都有一个名称,例如 js、tsx 或 json。在构建扩展 Bun 功能的插件时,会使用这些名称。
若要显式指定加载器,请使用 type 导入属性。
内置加载器
js
JavaScript。.cjs 和 .mjs 的默认加载器。
解析代码并应用一组默认转换,例如死代码消除和树摇。Bun 不会向下转换语法。
jsx
JavaScript + JSX。.js 和 .jsx 的默认加载器。
与 js 加载器相同,但支持 JSX 语法。默认情况下,JSX 会向下转换为普通 JavaScript;具体细节取决于 tsconfig.json 中的 jsx* 编译器选项。请参阅 TypeScript 关于 JSX 的文档。
ts
TypeScript 加载器。.ts、.mts 和 .cts 的默认加载器。
剥离所有 TypeScript 语法,然后行为与 js 加载器相同。Bun 不做类型检查。
tsx
TypeScript + JSX 加载器。.tsx 的默认加载器。将 TypeScript 和 JSX 转译为普通 JavaScript。
json
JSON 加载器。.json 的默认加载器。
JSON 文件可以直接导入。
.json 文件作为打包器的入口点传入,它会被转换为一个 export default 解析后对象的 .js 模块。
jsonc
带注释的 JSON 加载器。.jsonc 的默认加载器。
JSONC(带注释的 JSON)文件可以直接导入。Bun 会解析这些文件,并移除注释和尾随逗号。
json 加载器相同。
Bun 会自动对
tsconfig.json、jsconfig.json、package.json 和 bun.lock 文件使用 jsonc 加载器。toml
TOML 加载器。.toml 的默认加载器。
TOML 文件可以直接导入。Bun 使用其快速的原生 TOML 解析器解析这些文件。
.toml 文件作为入口点传入,它会被转换为一个 export default 解析后对象的 .js 模块。
yaml
YAML 加载器。.yaml 和 .yml 的默认加载器。
YAML 文件可以直接导入。Bun 使用其快速的原生 YAML 解析器解析这些文件。
.yaml 或 .yml 文件作为入口点传入,它会被转换为一个 export default 解析后对象的 .js 模块。
json5
JSON5 加载器。.json5 的默认加载器。
JSON5 文件可以直接导入。Bun 使用其快速的原生 JSON5 解析器解析这些文件。JSON5 是 JSON 的超集,增加了注释、尾随逗号、未加引号的键、单引号字符串等特性。
.json5 文件作为入口点传入,它会被转换为一个 export default 解析后对象的 .js 模块。
text
文本加载器。.txt 的默认加载器。
文本文件可以直接导入。文件会被读取并作为字符串返回。
.txt 文件作为入口点传入,它会被转换为一个 export default 文件内容的 .js 模块。
napi
本地扩展加载器。.node 的默认加载器。
运行时可以直接导入本地扩展。
.node 文件由 file 加载器处理。
sqlite
SQLite 加载器。with { "type": "sqlite" } 导入属性。
在运行时和打包器中,SQLite 数据库可以直接导入。数据库通过 bun:sqlite 加载。
target 为 bun 时支持。
默认情况下,数据库位于包外部:磁盘上的数据库文件不会被打包到最终输出中,因此你可以使用在其他位置加载的数据库。
你可以通过 "embed" 属性改变这个行为:
outdir,并使用哈希后的文件名。
html
html 加载器会处理 HTML 文件并打包所有引用的资源。它:
- 打包并哈希引用的 JavaScript 文件(
<script src="...">) - 打包并哈希引用的 CSS 文件(
<link rel="stylesheet" href="...">) - 哈希引用的图像(
<img src="...">) - 保留外部 URL(默认情况下,任何以
http://或https://开头的 URL)
lol-html 将 script 和 link 标签提取为入口点,并将其他资源作为外部资源处理。
选择器列表如下:
audio[src]img[src]img[srcset]link[as='font'][href], link[type^='font/'][href]link[as='image'][href]link[as='style'][href]link[as='video'][href], link[as='audio'][href]link[as='worker'][href]link[rel='icon'][href], link[rel='apple-touch-icon'][href]link[rel='manifest'][href]link[rel='stylesheet'][href]script[src]source[src]source[srcset]video[poster]video[src]
HTML 加载器在不同场景下的行为
html 加载器根据使用方式,行为不同:-
静态构建:运行
bun build ./index.html,Bun 生成包含所有资源且已哈希的静态网站。 -
运行时:运行
bun run server.ts(其中server.ts导入 HTML 文件),Bun 会在开发中实时打包资源,支持热模块替换。 -
全栈构建:运行
bun build --target=bun server.ts(其中server.ts导入 HTML 文件),导入会解析为一个清单对象,供Bun.serve高效地在生产环境中服务预打包资源。
css
CSS 加载器。.css 的默认加载器。
CSS 文件可以直接导入。这主要用于全栈应用,允许 CSS 与 HTML 一起打包。
sh 加载器
Bun Shell 加载器。.sh 文件的默认加载器。
此加载器解析 Bun Shell 脚本。它仅在启动 Bun 本身时受支持,因此在打包器或运行时中不可用。
file
文件加载器。所有未识别文件类型的默认加载器。
文件加载器将导入解析为被导入文件的 路径/URL,通常用来引用媒体或字体资源。
logo.ts
logo.svg 文件是否存在,并将导入解析为磁盘上的绝对路径。
outdir,导入会解析为指向所复制文件的相对路径。
Output
publicPath,导入会使用其值作为前缀来构造绝对路径/URL。
被复制文件的路径和文件名由
naming.asset 的值决定。outdir,复制文件名由
naming.asset 的值确定。
解决 TypeScript 导入错误
解决 TypeScript 导入错误
如果你使用 TypeScript,可能会遇到类似错误:要解决此问题,请在项目中的任意位置创建一个 这告诉 TypeScript,所有默认导入
*.d.ts 文件(文件名任意),内容如下:.svg 文件都应被视为字符串。