Bun

加载器

Bun 捆绑器开箱即用地实现了一组默认加载器。作为经验法则,捆绑器和运行时开箱即用地支持相同的文件类型集。

.js .cjs .mjs .mts .cts .ts .tsx .jsx .toml .json .txt .wasm .node

Bun 使用文件扩展名来确定应使用哪个内置加载器来解析文件。每个加载器都有一个名称,例如 jstsxjson。在构建扩展 Bun 的自定义加载器的插件时使用这些名称。

内置加载器

js

JavaScript.cjs.mjs 的默认值。

解析代码并应用一组默认转换,例如死代码消除和摇树。请注意,Bun 目前不会尝试转换语法。

jsx

JavaScript + JSX..js.jsx 的默认值。

js 加载器相同,但支持 JSX 语法。默认情况下,JSX 会转换为纯 JavaScript;具体转换方式取决于 tsconfig.json 中的 jsx* 编译器选项。有关 JSX 的更多信息,请参阅 TypeScript 文档 on JSX

ts

TypeScript 加载器.ts.mts.cts 的默认值。

剥离所有 TypeScript 语法,然后与 js 加载器完全相同。Bun 不执行类型检查。

tsx

TypeScript + JSX 加载器.tsx 的默认值。将 TypeScript 和 JSX 都转换为原生 JavaScript。

json

JSON 加载器.json 的默认值。

JSON 文件可以直接导入。

import pkg from "./package.json";
pkg.name; // => "my-package"

在打包期间,解析后的 JSON 以 JavaScript 对象的形式内联到包中。

var pkg = {
  name: "my-package",
  // ... other fields
};
pkg.name;

如果将 .json 文件作为包程序的入口点传递,它将转换为 .js 模块,该模块 export default 解析后的对象。

输入
输出
输入
{
  "name": "John Doe",
  "age": 35,
  "email": "[email protected]"
}
输出
export default {
  name: "John Doe",
  age: 35,
  email: "[email protected]"
}

toml

TOML 加载器.toml 的默认值。

TOML 文件可以直接导入。Bun 将使用其快速的原生 TOML 解析器对其进行解析。

import config from "./bunfig.toml";
config.logLevel; // => "debug"

// via import attribute:
// import myCustomTOML from './my.config' with {type: "toml"};

在打包期间,解析后的 TOML 以 JavaScript 对象的形式内联到包中。

var config = {
  logLevel: "debug",
  // ...other fields
};
config.logLevel;

如果将 .toml 文件作为入口点传递,它将转换为 .js 模块,该模块 export default 解析后的对象。

输入
输出
输入
name = "John Doe"
age = 35
email = "[email protected]"
输出
export default {
  name: "John Doe",
  age: 35,
  email: "[email protected]"
}

text

文本加载器.txt 的默认值。

读取文本文件的内容并以字符串的形式内联到包中。 文本文件可以直接导入。读取文件并将其作为字符串返回。

import contents from "./file.txt";
console.log(contents); // => "Hello, world!"

// To import an html file as text
// The "type' attribute can be used to override the default loader.
import html from "./index.html" with { type: "text" };

在构建期间引用时,内容将作为字符串放入包中。

var contents = `Hello, world!`;
console.log(contents);

如果将 .txt 文件作为入口点传递,它将转换为 .js 模块,该模块 export default 文件内容。

输入
输出
输入
Hello, world!
输出
export default "Hello, world!";

wasm

WebAssembly 加载器.wasm 的默认值。

在运行时,WebAssembly 文件可以直接导入。读取文件并将其作为 WebAssembly.Module 返回。

import wasm from "./module.wasm";
console.log(wasm); // => WebAssembly.Module

在包程序中,.wasm 文件使用 file 加载器进行处理。

napi

原生插件加载器.node 的默认值。

在运行时,原生插件可以直接导入。

import addon from "./addon.node";
console.log(addon);

在包程序中,.node 文件使用 file 加载器进行处理。

sqlite

SQLite 加载器with { "type": "sqlite" } 导入属性

在运行时和包程序中,SQLite 数据库可以直接导入。这将使用 bun:sqlite 加载数据库。

import db from "./my.db" with { type: "sqlite" };

仅当 targetbun 时才支持此功能。

默认情况下,数据库是包外部的(以便您可能在其他地方使用已加载的数据库),因此磁盘上的数据库文件不会捆绑到最终输出中。

您可以使用 "embed" 属性更改此行为

// embed the database into the bundle
import db from "./my.db" with { type: "sqlite", embed: "true" };

使用 独立可执行文件 时,数据库将嵌入到单文件可执行文件中。

否则,要嵌入的数据库将使用哈希文件名复制到 outdir 中。

sh 加载器

Bun Shell 加载器.sh 文件的默认值

此加载器用于解析 Bun Shell 脚本。它仅在启动 Bun 本身时受支持,因此在捆绑器或运行时中不可用。

bun run ./script.sh

file

文件加载器。所有无法识别的文件类型的默认值。

文件加载器将导入解析为导入文件的 路径/URL。它通常用于引用媒体或字体资产。

logo.ts
import logo from "./logo.svg";
console.log(logo);

在运行时,Bun 检查 logo.svg 文件是否存在,并将其转换为磁盘上 logo.svg 位置的绝对路径。

bun run logo.ts
/path/to/project/logo.svg

在捆绑器中,情况略有不同。文件按原样复制到 outdir 中,并且导入解析为指向复制文件的相对路径。

输出
var logo = "./logo.svg";
console.log(logo);

如果为 publicPath 指定了值,则导入将使用该值作为前缀来构建绝对路径/URL。

公共路径已解析的导入
""(默认)/logo.svg
"/assets"/assets/logo.svg
"https://cdn.example.com/"https://cdn.example.com/logo.svg

复制的文件的位置和文件名由 naming.asset 的值决定。

此加载器按原样复制到 outdir 中。复制的文件的名称使用 naming.asset 的值确定。

修复 TypeScript 导入错误