generated at
BunPlugin


GPT-4
BunのプラグインAPIは、Bunのランタイムとバンドラの両方を拡張するためのユニバーサルなAPIを提供しています。プラグインはインポートをインターセプトし、ファイルの読み込みやコードのトランスパイルなどのカスタムローディングロジックを実行します。これにより、.scssや.yamlなどの追加ファイルタイプのサポートを追加したり、CSS抽出やマクロ、クライアント・サーバーコードの共存などのフレームワークレベルの機能を実装することができます。

ラグインの基本構造

プラグインは、名前プロパティとsetup関数を含むシンプルなJavaScriptオブジェクトとして定義されます。
ts
import type { BunPlugin } from "bun"; const myPlugin: BunPlugin = { name: "Custom loader", setup(build) { // 実装内容 }, }; plugin(myPlugin);
プラグインを使用するには、bunfig.tomlファイルでプリロードオプションを設定します。
toml
preload = ["./myPlugin.ts"]

### プラグインの用途
プラグインの主な用途は、Bunに対して追加のファイルタイプを読み込むローダーを拡張することです。例えば、以下のようにYAMLファイルを読み込むローダーを実装することができます。

ts
import { 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", }; }); }, });


### その他の機能

プラグインはデータのロードだけでなく、仮想モジュールの作成や既存モジュールのオーバーライドなども可能です。仮想モジュールはランタイムでのみ利用でき、指定した文字列を基に仮想的なモジュールを作成できます。

ts
import { 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の機能を拡張できます。