umi-plugin-abp-feature
Version:
feature
64 lines (54 loc) • 2.07 kB
text/typescript
import { IApi } from 'umi';
import { join } from 'path';
import getContextContent from './utils/getContextContent';
import getFeatrueProviderContent from './utils/getFeatureProviderContent';
import getFeatureContent from './utils/getFeatureContent';
import getRootContainerContent from './utils/getRootContainerContent';
import { checkIfHasDefaultExporting } from './utils';
const feature_DIR = 'plugin-abp-feature'; // plugin-feature 插件创建临时文件的专有文件夹
export default function(api: IApi) {
const umiTmpDir = api.paths.absTmpPath;
const srcDir = api.paths.absSrcPath;
const featureFilePath = api.utils.winPath(join(srcDir!, 'feature'));
api.onGenerateFiles(() => {
// 判断 feature 工厂函数存在并且 default 暴露了一个函数
if (checkIfHasDefaultExporting(featureFilePath)) {
// 创建 feature 的 context 以便跨组件传递 feature 实例
api.writeTmpFile({
path: `${feature_DIR}/context.ts`,
content: getContextContent(),
});
// 创建 featureProvider,1. 生成 feature 实例; 2. 遍历修改 routes; 3. 传给 context 的 Provider
api.writeTmpFile({
path: `${feature_DIR}/featureProvider.ts`,
content: getFeatrueProviderContent(api.utils),
});
// 创建 feature 的 hook
api.writeTmpFile({
path: `${feature_DIR}/feature.tsx`,
content: getFeatureContent(),
});
// 生成 rootContainer 运行时配置
api.writeTmpFile({
path: `${feature_DIR}/rootContainer.ts`,
content: getRootContainerContent(),
});
}
});
if (checkIfHasDefaultExporting(featureFilePath)) {
// 增加 rootContainer 运行时配置
api.addRuntimePlugin(() =>
api.utils.winPath(join(umiTmpDir!, feature_DIR, 'rootContainer.ts')),
);
api.addUmiExports(() => [
{
exportAll: true,
source: `../${feature_DIR}/feature`,
},
]);
api.addTmpGenerateWatcherPaths(() => [
`${featureFilePath}.ts`,
`${featureFilePath}.js`,
]);
}
}