Runtime Plugin API
插件钩子定义:
export interface FarmRuntimePlugin {
// 插件名称
name: string;
// 模块系统启动时调用
bootstrap?: (moduleSystem: ModuleSystem) => void | Promise<void>;
// 新模块创建时调用
moduleCreated?: (module: Module) => void | Promise<void>;
// 新模块执行后调用
moduleInitialized?: (module: Module) => void | Promise<void>;
// 读取缓存时调用
readModuleCache?: (module: Module) => boolean | Promise<boolean>;
// 模块未注册时调用
moduleNotFound?: (moduleId: string) => void | Promise<void>;
// 加载资源时调用,在此钩子中自定义您的资源加载 。
// return { success: true } 表示该资源已成功加载。
// return { success: false, retryWithDefaultResourceLoader: true } 表示此资源尚未成功加载,应使用默认资源加载器重试。
loadResource?: (
resource: Resource,
targetEnv: 'browser' | 'node'
) => Promise<ResourceLoadResult>;
}
编写运行时插件
请参阅编写运行时插件
钩子
那么调用Farm运行时插件钩子时有两种执行顺序:
serial
: 该钩子按照插 件的顺序依次调用ono。 所有插件都会被串行调用。first
: 一旦返回truthy
值就跳过所有剩下的插件。
钩子执行顺序:
for each module true true return false
bootstrap -----------> module registered? ------> module initialized? ----> readModuleCache -------------------------> done
| | false |false | return true |
| | |--------------> moduleCreated ------> moduleInitialized --|
| |-------------------> moduleNotFound
|
| dynamic import
| ---------------> loadResource
name
type
:string
您的运行时插件的名称。
bootstrap
hook type
:serial
type
:(moduleSystem: ModuleSystem) => void | Promise<void>
当模块系统引导时调用一次。 在此挂钩中设置您的插件。 例子:
export default <Plugin>{
name: 'farm-runtime-hmr-client-plugin',
// define hooks
bootstrap(moduleSystem) {
hmrClient = new HmrClient(moduleSystem);
hmrClient.connect();
},
};
moduleCreated
hook type
:serial
type
:(module: Module) => void | Promise<void>