BunPlugin
BunのプラグインAPIは、Bunのランタイムとバンドラの両方を拡張するためのユニバーサルなAPIを提供しています。プラグインはインポートをインターセプトし、ファイルの読み込みやコードのトランスパイルなどのカスタムローディングロジックを実行します。これにより、.scssや.yamlなどの追加ファイルタイプのサポートを追加したり、CSS抽出やマクロ、クライアント・サーバーコードの共存などのフレームワークレベルの機能を実装することができます。
ラグインの基本構造
プラグインは、名前プロパティとsetup関数を含むシンプルなJavaScriptオブジェクトとして定義されます。
tsimport type { BunPlugin } from "bun";
const myPlugin: BunPlugin = {
name: "Custom loader",
setup(build) {
// 実装内容
},
};
plugin(myPlugin);
tomlpreload = ["./myPlugin.ts"]
プラグインの主な用途は、Bunに対して追加のファイルタイプを読み込むローダーを拡張することです。例えば、以下のようにYAMLファイルを読み込むローダーを実装することができます。
tsimport { plugin } from "bun";
import { load } from "js-yaml";
await plugin({
name: "YAML",
async setup(build) {
build.onLoad({ filter: /\.(yaml|yml)$/ }, async (args) => {
const text = await Bun.file(args.path).text();
const exports = load(text);
return {
exports,
loader: "object",
};
});
},
});
プラグインはデータのロードだけでなく、仮想モジュールの作成や既存モジュールのオーバーライドなども可能です。仮想モジュールはランタイムでのみ利用でき、指定した文字列を基に仮想的なモジュールを作成できます。
tsimport { plugin } from "bun";
plugin({
name: "my-virtual-module",
setup(build) {
build.module("my-transpiled-virtual-module", () => {
return {
contents: "console.log('hello world!')",
loader: "js",
};
});
},
});
BunのプラグインAPIは、様々なカスタマイズを可能にする強力なツールです。ファイルの読み込みロジックを拡張し、特定のファイルタイプのサポートを追加したり、仮想モジュールを作成することで、開発者は柔軟にBunの機能を拡張できます。