# 插件系统 Module Federation 提供了一套轻量的运行时插件系统,用以实现自身的大多数功能,并允许用户进行扩展。 开发者编写的插件能够修改 `Module Federation` 的默认行为,并添加各类额外功能,包括但不限于: - 获取上下文信息 - 注册生命周期钩子 - 修改 Module Federation 配置 - ... ## 开发插件 插件提供类似 `() => ModuleFederationRuntimePlugin` 的函数。 ### 插件示例 ```ts title="custom-runtime-plugin.ts" import type { ModuleFederationRuntimePlugin } from '@module-federation/enhanced/runtime'; const runtimePlugin: () => ModuleFederationRuntimePlugin = function () { return { name: 'my-runtime-plugin', beforeInit(args) { console.log('beforeInit: ', args); return args; }, beforeRequest(args) { console.log('beforeRequest: ', args); return args; }, afterResolve(args) { console.log('afterResolve', args); return args; }, onLoad(args) { console.log('onLoad: ', args); return args; }, async loadShare(args) { console.log('loadShare:', args); }, async beforeLoadShare(args) { console.log('beforeloadShare:', args); return args; }, }; }; export default runtimePlugin; ``` 注册插件(两种方式选择一种即可): - 构建配置中注册插件 ```ts title="rspack.config.ts" const path = require('path'); module.exports = { plugins: [ new ModuleFederationPlugin({ // ... runtimePlugins: [path.resolve(__dirname, './custom-runtime-plugin.ts')], }), ], }; ``` - 运行时注册插件 ```ts import { registerPlugins } from '@module-federation/enhanced/runtime' import runtimePlugin from 'custom-runtime-plugin.ts'; registerPlugins([runtimePlugin()]); ``` ### 插件结构 函数形式的插件可以 **接受选项对象** 并 **返回插件实例**,并通过闭包机制管理内部状态。 其中各部分的作用分别为: - `name` 属性用于标注插件名称。 - `fn` 各类钩子。 ### 命名规范 插件的命名规范如下: - 插件的函数通过 default 导出。 - 插件的 `name` 采用 `xxx-plugin` 格式。 下面是一个例子: ```ts import type { ModuleFederationRuntimePlugin } from '@module-federation/enhanced/runtime'; const pluginFooBar = (): ModuleFederationRuntimePlugin => ({ name: 'xxx-plugin', //... }); export default pluginFooBar; ``` ## hooks 参考 [Runtime Hooks](/zh/guide/runtime/runtime-hooks.md)