.js .cjs .mjs .mts .cts .ts .tsx .jsx .css .json .jsonc .json5 .toml .yaml .yml .xml .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 模块。
xml
XML 加载器。.xml 的默认加载器。
XML 文件可以直接导入。Bun 使用原生 XML 1.0 解析器将其解析为 Bun.XML.parse 的紧凑对象结构:根元素对应一个键,属性对应 "@name" 键,重复的子元素对应数组,与属性或子元素相邻的文本对应 "#text",并且所有值都是字符串。
.xml 文件作为入口点传入,它会被转换为一个 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 文件都应被视为字符串。