系统级 API
registerPlugin
加载插件,用于插件集等需要在一个插件中加载其它插件的场景。
const demoPlugin = require('./demoPlugin');
api.registerPlugin({
id: 'plugin-id',
apply: demoPlugin,
opts: {},
});
registerMethod
注册插件方法,用于给插件添加新的方法给其它插件使用。
// 类型通常和方法名对应 addXxx modifyXxx onXxx afterXxx beforeXxx
api.registerMethod('addDvaRendererWrapperWithComponent', {
type: api.API_TYPE.ADD
type: api.API_TYPE.EVENT
type: api.API_TYPE.MODIFY
apply: () => {} // for custom type
});
对于类型是 api.API_TYPE.ADD
的插件方法,你应该返回一项或者通过数组返回多项,也可以返回一个空数组,比如:
api.addHTMLMeta({ /* ... */ });
api.addHTMLMeta([{ /* ... */ }, { /* ... */ }]);
api.addHTMLMeta(() => {
if (opt === 'h5') {
return { /* ... */ };
}
return [];
});
类型是 api.API_TYPE.EVENT
的插件方法,你应该传入一个 function 并且不需要返回任何内容。
类型是 api.API_TYPE.MODIFY
的插件方法,返回修改后的内容。
你也可以通过 apply
来自定义处理的函数,你注册的方法可能被多个插件使用,当你调用 applyPlugins
时在 umi 内部会通过 reduce 函数去处理这些插件的返回值。你定义的 apply
函数决定了 applyPlugins
是怎么处理多个插件的结果作为它的返回值的。通常情况下内置的三种类型就可以满足你的需求了。
applyPlugins
在插件用应用通过 registerMethod 注册的某个方法。
// 如果 type 为 api.API_TYPE.ADD wrappers 为各个插件返回的值组成的数组
// EVENT 则 wrappers 返回 undefined
// MODIFY 则返回最后的修改值
const wrappers = api.applyPlugins('wrapDvaRendererWithComponent');
restart
api.restart('why');
重新执行 umi dev
,比如在 bigfish 中修改了 appType,需要重新挂载插件的时候可以调用该方法。
rebuildTmpFiles
api.rebuildTmpFiles('config dva changed');
重新生成 bootstrap file(entryFile)等临时文件,这个是最常用的方法,国际化,dva 等插件的配置变化都会用到。
refreshBrowser
刷新浏览器。
rebuildHTML
触发 HTML 重新构建。
changePluginOption
设置插件的配置,比如在 react 插件集中中需要把插件集的 dva 配置传递给 dva 插件的时候用到。
api.changePluginOption('dva-plugin-id', {
immer: true
});
registerCommand
注册 umi xxx 命令行,比如在 umi 内部 help 命令就是这么实现的。
api.registerCommand('help', {
hide: true
}, args => {
// more code...
});
_registerConfig
注册一个配置项,系统方法,通常不要使用。
api._registerConfig(() => {
return () => {
return {
name: 'dva',
validate: validate,
onChange(newConfig, oldConfig) {
api.setPluginDefaultConfig('umi-plugin-dva', config);
}
};
}
});
_modifyCommand
修改命令的名称和参数。
// A demo for modify block npmClient to cnpm:
api._modifyCommand(({ name, args }) => {
if (name === 'block') {
args.npmClient = args.npmClient || 'cnpm';
}
return { name, args };
});