Compiler
Compiler 是 Rspack 内部的核心对象,当你调用 Rspack 的 JavaScript API 或 CLI 时,都会创建一个 Compiler 实例。
它提供了 run 和 watch 等方法来启动构建,同时暴露了丰富的 Compiler 钩子,使 Rspack 插件能够干预构建的各个阶段。
Compiler 对象方法
run
启动一次编译流程,编译流程完成或因错误中止时触发回调。
如果你需要多次调用同一个 compiler 对象的 run 方法,请注意以下事项:
- 该 API 不支持并发编译操作。在启动新的编译任务之前,必须在
compiler.run的回调函数中调用compiler.close()并等待其执行完成,之后才能进行下一次compiler.run调用。若同时运行多个编译进程,可能会导致输出文件产生不可预期的结果。 - Rspack 的缓存失效检测机制依赖于
modifiedFiles和removedFiles参数。在启用缓存的情况下,如果你使用了自定义的 watcher 来监听文件变化,需要通过options参数将这两个值传递给 Rspack。
watch
启动持续监听,在文件变化后自动启动一次编译流程,每次编译流程完成或因错误中止时触发回调。
这个 API 一次仅支持一个监听。请在 compiler.watch 回调中调用 compiler.close,并等待它完成后再次执行 compiler.watch。并发编译将破坏输出文件。
Watching 对象提供如下方法:
watch:- 类型:
(files: string[], dirs: string[], missing: string[]): void - 用途: 添加需要被监听的文件和目录
- 类型:
invalidate:- 类型:
(callback: () => void): void - 用途: 立即结束本轮监听,并以当前记录的文件变更启动一次编译流程,不会停止整个监听器。
- 类型:
suspend:- 类型:
(): void - 用途: 进入仅监听状态,不会启动新的编译流程
- 类型:
resume:- 类型:
(): void - 用途: 退出仅监听状态,并以当前记录的文件变更启动一次编译流程
- 类型:
close:- 类型:
(callback: () => void): void - 用途: 停止整个监听器
- 类型:
close
关闭当前构建器,在此期间处理低优先级任务,如缓存等。
getInfrastructureLogger
创建一个不与 Compilation 关联的全局日志对象,用于打印全局信息。
getCache
创建一个缓存对象,以在构建流程中共享数据。
purgeInputFileSystem
停止对文件系统的读取循环,它内部包含定时器,可能会导致 compiler.close 后进程依然无法退出。
createChildCompiler
允许在 Rspack 中运行另一个 Rspack 实例。但是,子编译器会应用不同的设置和配置。他会从父 Compiler(或者顶级 Compiler)中复制所有的钩子(hook)和插件(plugin),并且创建一个子 Compiler 实例。 返回值为创建好的 Compiler 实例。
runAsChild
启动子 Compiler 的构建流程,会进行一次完整的构建流程并生成产物。
isChild
当前是否为子 Compiler。
Compiler 对象属性
hooks
详见 Compiler 钩子
rspack
- 类型:
typeof rspack
获取当前的 @rspack/core 的导出,以此来获取关联的内部对象。当你无法直接引用 @rspack/core,或者存在多个 Rspack 实例时很有用。
一个常见的例子是在 Rspack 插件中获取 sources 对象:
webpack
- 类型:
typeof rspack
等同于 compiler.rspack,该属性用于兼容 webpack 插件。
如果你开发的 Rspack 插件需要兼容 webpack,可以使用该属性代替 compiler.rspack。
name
- 类型:
string
获取名称:
- 对于根 Compiler 等同于
name - 对于子 Compiler 时为
createChildCompiler传入的值 - 对于 MultiCompiler 且为 KV 形式时为 Key 的值
context
当前的项目根目录:
- 通过
new Compiler时为传入的值 - 通过
rspack({})等创建时同于 context 配置
root
- 类型:
Compiler
获取根 Compiler 实例。
options
- 类型:
RspackOptionsNormalized
获取根 Compiler 所使用的完整构建配置。
watchMode
- 类型:
boolean
是否通过 watch 启动。
watching
- 类型:
Watching
获取 watch 启动下的监听控制对象,详见 watch 方法
running
- 类型:
boolean
当前是否正在执行构建流程。
inputFileSystem
- 类型:
InputFileSystem
获取用于从文件系统读取的代理对象,其内部有缓存等优化,以降低对同一文件的重复读取。
outputFileSystem
- 类型:
OutputFileSystem
获取用于输出到文件系统的代理对象,默认使用 fs。
watchFileSystem
- 类型:
WatchFileSystem
获取用于持续监听文件/目录变化的代理对象,提供一个 watch 方法来启动监听,并在回调中传入变更和移除的项目。
MultiCompiler
MultiCompiler 可以让 Rspack 同时执行多份配置。如果传给 Rspack 的 JavaScript API 的配置为多个配置对象构成的数组,Rspack 会创建多个 compiler 实例,并且在所有 compiler 执行完毕后调用回调方法。
也可以通过 new MultiCompiler 创建:
MultiCompiler 也提供了部分 Compiler 的方法和属性。
MultiCompiler 方法
setDependencies
指定 compiler 之间的依赖关系,以 compiler.name作为标识,以此保证 compiler 执行顺序。
validateDependencies
检测 compiler 之间的依赖关系是否合法,若成环或缺失会触发回调。
run
根据依赖关系执行各个 compiler 的 run 方法,启动编译流程。
watch
根据依赖关系执行各个 compiler 的 watch 方法,启动持续监听,在文件变化后自动启动一次编译流程。
close
执行各个 compiler 的 close 方法,关闭构建器,并在此期间处理低优先级任务,如缓存等。
purgeInputFileSystem
执行各个 compiler 的 purgeInputFileSystem,停止对文件系统的读取循环。
getInfrastructureLogger
创建一个不与 Compilation 关联的全局日志对象,用于打印全局信息。
等同于
compilers[0].getInfrastructureLogger()
MultiCompiler 属性
compilers
- 类型:
Compiler[]
获取包含的所有 Compiler 实例。
options
只读- 类型:
RspackOptionsNormalized[]
获取各个 Compiler 所使用的完整构建配置。
inputFileSystem
只写- 类型:
InputFileSystem
为各个 Compiler 设置用于从文件系统读取的代理对象。
outputFileSystem
只写- 类型:
OutputFileSystem
为各个 Compiler 设置用于输出到文件系统的代理对象。
watchFileSystem
只写- 类型:
WatchFileSystem
为各个 Compiler 设置用于持续监听文件/目录变化的代理对象。
running
- 类型:
boolean
当前是否正在执行构建流程。

