feat: handle extra slots

This commit is contained in:
LeoYuan 袁力皓 2023-02-14 17:49:58 +08:00
parent 37e07bb238
commit 20b34b74a2
2 changed files with 40 additions and 11 deletions

View File

@ -8,5 +8,26 @@ export const CONTAINER_TYPE = {
export const SUPPORT_SCHEMA_VERSION_LIST = ['0.0.1', '1.0.0']; export const SUPPORT_SCHEMA_VERSION_LIST = ['0.0.1', '1.0.0'];
// built-in slot names which have been handled in ProjectBuilder
export const BUILTIN_SLOT_NAMES = [
'pages',
'components',
'router',
'entry',
'appConfig',
'buildConfig',
'constants',
'utils',
'i18n',
'globalStyle',
'htmlEntry',
'packageJSON',
'demo',
];
export const isBuiltinSlotName = function (name: string) {
return BUILTIN_SLOT_NAMES.includes(name);
};
export * from './file'; export * from './file';
export * from './generator'; export * from './generator';

View File

@ -16,6 +16,7 @@ import { createResultDir, addDirectory, addFile } from '../utils/resultHelper';
import { createModuleBuilder } from './ModuleBuilder'; import { createModuleBuilder } from './ModuleBuilder';
import { ProjectPreProcessor, ProjectPostProcessor, IContextData } from '../types/core'; import { ProjectPreProcessor, ProjectPostProcessor, IContextData } from '../types/core';
import { CodeGeneratorError } from '../types/error'; import { CodeGeneratorError } from '../types/error';
import { isBuiltinSlotName } from '../const';
interface IModuleInfo { interface IModuleInfo {
moduleName?: string; moduleName?: string;
@ -272,17 +273,8 @@ export class ProjectBuilder implements IProjectBuilder {
}); });
} }
// TODO: 更多 slots 的处理??是不是可以考虑把 template 中所有的 slots 都处理下? // handle extra slots
// const whitelistSlotNames = [ await this.generateExtraSlots(builders, parseResult, buildResult);
// 'router',
// 'entry',
// 'appConfig',
// 'buildConfig',
// 'router',
// ];
// Object.keys(this.template.slots).forEach((slotName: string) => {
// });
// Post Process // Post Process
const isSingleComponent = parseResult?.project?.projectRemark?.isSingleComponent; const isSingleComponent = parseResult?.project?.projectRemark?.isSingleComponent;
@ -339,6 +331,22 @@ export class ProjectBuilder implements IProjectBuilder {
return builders; return builders;
} }
private async generateExtraSlots(
builders: Record<string, IModuleBuilder>,
parseResult: IParseResult,
buildResult: IModuleInfo[],
) {
for (const slotName in this.template.slots) {
if (!isBuiltinSlotName(slotName)) {
const { files } = await builders[slotName].generateModule(parseResult);
buildResult.push({
path: this.template.slots[slotName].path,
files,
});
}
}
}
} }
export function createProjectBuilder(initOptions: ProjectBuilderInitOptions): IProjectBuilder { export function createProjectBuilder(initOptions: ProjectBuilderInitOptions): IProjectBuilder {