插件 (Plugin)
如果说 Loader 是文件转换(预处理)的核心,那么插件(Plugin)则是 Rspack 整体构建流程的核心组成部分,大部分 Rspack 的原生实现依赖了 Rust 侧的插件系统。
对于 Node 的用户来说,你无需担心和 Rust 的 Interop 问题,因为 Rspack 会自动帮你处理好这些细节,你只需要关注如何使用插件即可。
示例
编写一个插件
插件的结构非常简单,只需要实现一个 apply
方法,这个方法接受一个 Compiler
实例,并会在 Rspack 插件初始化时被调用。详细的 API 可以参考 Plugin API。
const PLUGIN_NAME = 'MyPlugin';
class MyPlugin {
apply(compiler) {
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
console.log('The Rspack build process is starting!');
});
}
}
module.exports = MyPlugin;
我们使用 CommonJS 风格的模块导出,这样在 rspack.config.js
中就可以直接使用 require
导入。
使用插件
在 rspack.config.js
中使用已经兼容的 webpack-bundle-analyzer :
rspack.config.js
const BundleAnalyzerPlugin =
require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
plugins: [new BundleAnalyzerPlugin()],
};
请参考 Plugin 兼容 来了解完成 Rspack 兼容性测试的插件列表。
类型定义
如果你使用 TypeScript 来编写 Rspack 插件,可以引入 Compiler
和 RspackPluginInstance
来声明插件的类型:
import type { Compiler, RspackPluginInstance } from '@rspack/core';
const PLUGIN_NAME = 'MyPlugin';
class MyPlugin implements RspackPluginInstance {
apply(compiler: Compiler) {
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
console.log('The Rspack build process is starting!');
});
}
}