Compiler 钩子

Overview

environment

在编译器准备环境时,初始化插件之后调用。

  • 类型: SyncHook<[]>

afterEnvironment

当编译器环境准备完成后,在 environment 钩子后直接调用。

  • 类型: SyncHook<[]>

entryOption

在 Rspack 选项中的 entry 被处理过之后调用。

  • 类型: SyncBailHook<[string, EntryNormalized]>
  • 参数:
    • string: 等同于 context 配置
    • EntryNormalized: 处理后的 entry 配置

afterPlugins

在初始化内部插件完成之后调用。

  • 类型: SyncHook<[Compiler]>
  • 参数:
    • Compiler: 当前 Compiler 实例

afterResolvers

resolver 设置完成之后触发。

  • 类型: SyncHook<[Compiler]>
  • 参数:
    • Compiler: 当前 Compiler 实例

initialize

当编译器被初始化时调用。

  • 类型: SyncHook<[]>

beforeRun

在开始执行一次构建之前调用。

NOTE

这个钩子仅在调用 compiler.run() 时触发(对应 rspack build 命令),在监听模式(watch mode)下不会执行。在监听模式下,你可以使用 watchRun 钩子。

  • 类型: AsyncSeriesHook<[Compiler]>
  • 参数:
    • Compiler: 当前 Compiler 实例
  • **示例:**同步操作
class ExamplePlugin {
  apply(compiler) {
    compiler.hooks.beforeRun.tap('ExamplePlugin', compiler => {
      console.log('Build is about to start...');
    });
  }
}
  • **示例:**异步操作
class ExamplePlugin {
  apply(compiler) {
    compiler.hooks.beforeRun.tapPromise(
      'ExamplePlugin',
      (compiler) => {
        console.log('Build is about to start...');

        await someAsyncOperation();
      },
    );
  }
}

run

在开始执行一次构建时调用。

NOTE

这个钩子仅在调用 compiler.run() 时触发(对应 rspack build 命令),在监听模式(watch mode)下不会执行。在监听模式下,你可以使用 watchRun 钩子。

  • 类型: AsyncSeriesHook<[Compiler]>
  • 参数:
    • Compiler: 当前 Compiler 实例
  • **示例:**同步操作
class ExamplePlugin {
  apply(compiler) {
    compiler.hooks.beforeRun.tap('ExamplePlugin', compiler => {
      console.log('Build start...');
    });
  }
}
  • **示例:**异步操作
class ExamplePlugin {
  apply(compiler) {
    compiler.hooks.beforeRun.tapPromise(
      'ExamplePlugin',
      (compiler) => {
        console.log('Build start...');

        await someAsyncOperation();
      },
    );
  }
}

watchRun

在监听模式下,开始执行一次构建时调用。

你可以通过 compiler.modifiedFilescompiler.removedFiles 获取变更的文件路径和删除的文件路径。

NOTE

这个钩子仅在调用 compiler.watch() 时触发,在非监听模式下不会执行。在非监听模式下,你可以使用 runbeforeRun 钩子。

  • 类型: AsyncSeriesHook<[Compiler]>
  • 参数:
    • Compiler: 当前 Compiler 实例
  • **示例:**同步操作
class ExamplePlugin {
  apply(compiler) {
    compiler.hooks.watchRun.tap('ExamplePlugin', compiler => {
      const { modifiedFiles, removedFiles } = compiler;
      if (modifiedFiles) {
        console.log('Changed files:', Array.from(modifiedFiles));
      }
      if (removedFiles) {
        console.log('Removed files:', Array.from(removedFiles));
      }
    });
  }
}
  • **示例:**异步操作
class ExamplePlugin {
  apply(compiler) {
    compiler.hooks.watchRun.tapPromise('ExamplePlugin', compiler => {
      await someAsyncOperation();
    });
  }
}

beforeCompile

在编译参数创建后执行插件。

  • 类型: AsyncSeriesHook<[]>

compile

在一个新的 compilation 创建之前调用。

  • 类型: SyncHook<[]>

thisCompilation

创建 compilation 时调用,在触发 compilation 钩子之前调用。

  • 类型: SyncHook<[Compilation]>
  • 参数:

compilation

compilation 创建之后执行。

  • 类型: SyncHook<[Compilation]>
  • 参数:

make

在 make 阶段开始前调用,在 make 阶段会以 entry 为起点构建模块依赖图,并使用 loader 处理各个模块。

  • 类型: AsyncParallelHook<[Compilation]>
  • 参数:

finishMake

在 make 阶段结束后调用。在 make 阶段,Rspack 会以 entry 为起点构建模块依赖图,并使用 loader 处理各个模块,当这个过程完成时会触发此钩子。

  • 类型: AsyncSeriesHook<[Compilation]>
  • 参数:

afterCompile

在 make 阶段结束后 seal 阶段开始前调用,在 seal 阶段会从模块图优化并创建 chunk 图,以生成产物信息。

  • 类型: AsyncSeriesHook<[Compilation]>
  • 参数:

shouldEmit

返回值为一个布尔值,用于决定是否将资源写入到磁盘中。

  • 类型: SyncBailHook<[Compilation]>
  • 参数:

emit

在产物输出到结果目录前执行。

  • 类型: AsyncSeriesHook<[Compilation]>
  • 参数:

afterEmit

输出产物到结果目录后执行。

  • 类型: AsyncSeriesHook<[Compilation]>
  • 参数:

done

当前 Compilation 处理完成时执行。

  • 类型: AsyncSeriesHook<Stats>
  • 参数:
    • Stats: 生成的 Stats 对象

afterDone

当前 Compilation 处理完成且 done 钩子调用之后执行。

  • 类型: SyncHook<Stats>
  • 参数:
    • Stats: 生成的 Stats 对象

failed

当前 Compilation 失败时调用。

  • 类型: SyncHook<[Error]>

invalid

当监听模式下的编译因文件变更而失效时执行。这个 hook 不会被复制到 child compiler 中。

  • 类型: SyncHook<[string | null, number]>
  • 参数:
    • fileName: 失效的文件路径
    • changeTime: 失效的文件修改时间戳

在触发重新编译时,这个 hook 可以用于获取变更的文件路径和修改时间,例如:

compiler.hooks.invalid.tap('MyPlugin', (fileName, changeTime) => {
  console.log(`Changed file: ${fileName}, change time: ${changeTime}`);
});

watchClose

停止监听时调用。

  • 类型: SyncHook<[]>

shutdown

当前 Compiler 关闭时调用。

  • Type: AsyncSeriesHook<[]>