組み込みプラグイン

組み込みプラグインは、rspack_macros を使用して定型コードの記述を回避します。 cargo-expand または rust-analyzer expand macro を使用して展開されたコードを確認できます。また、これらのマクロの開発/テストには、rspack_macros_test から始めることができます。

簡単な例

use rspack_hook::{plugin, plugin_hook};
use rspack_core::{Plugin, PluginContext, ApplyContext, CompilerOptions};
use rspack_core::CompilerCompilation;
use rspack_error::Result;

// define the plugin
#[plugin]
pub struct MyPlugin {
  options: MyPluginOptions
}

// define the plugin hook
#[plugin_hook(CompilerCompilation for MuPlugin)]
async fn compilation(&self, compilation: &mut Compilation) -> Result<()> {
  // do something...
}

// implement apply method for the plugin
impl Plugin for MyPlugin {
  fn apply(&self, ctx: PluginContext<&mut ApplyContext>, _options: &mut CompilerOptions) -> Result<()> {
    ctx.context.compiler_hooks.tap(compilation::new(self))
    Ok(())
  }
}

そして、例はこちらです。

必要なフックがまだ定義されていない場合は、`rspack_hook::define_hook` で定義できます。 `compiler.hooks.assetEmitted` を例に取ります。

// this will allow you define hook's arguments without limit
define_hook!(CompilerShouldEmit: AsyncSeriesBail(compilation: &mut Compilation) -> bool);
//           ------------------  --------------- -----------------------------  -------
//           hook name           exec kind       hook arguments                 return value (Result<Option<bool>>)

#[derive(Debug, Default)]
pub struct CompilerHooks {
  // ...
  // and add it here
  pub asset_emitted: CompilerAssetEmittedHook,
}

5種類の実行種があります。

  • `AsyncSeries`、戻り値は `Result<()>` です。
  • `AsyncSeriesBail`、戻り値は `Result<Option<T>>` です。
  • `AsyncParallel`、戻り値は `Result<()>` です。
  • `SyncSeries`、戻り値は `Result<()>` です。
  • `SyncSeriesBail`、戻り値は `Result<Option<T>>` です。