From 87f1bfbdd659172ec493cda9111bad049bc4bc73 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Thu, 18 Aug 2022 19:27:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(cli):=20=E6=B7=BB=E5=8A=A0onInit/onPrepare?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/cli/src/Core.ts | 11 +++++++++-- packages/cli/src/types.ts | 12 ++++++++++++ packages/cli/src/utils/resolveAppPackages.ts | 4 ++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/Core.ts b/packages/cli/src/Core.ts index 00e2a62f6..27ee792a4 100644 --- a/packages/cli/src/Core.ts +++ b/packages/cli/src/Core.ts @@ -2,7 +2,7 @@ import path from 'path'; import fs from 'fs-extra'; -import { UserConfig } from './types'; +import { ModuleMainFilePath, UserConfig } from './types'; import { prepareEntryFile, resolveAppPackages } from './utils'; export default class Core { @@ -10,7 +10,7 @@ export default class Core { public options: UserConfig; - public moduleMainFilePath = { + public moduleMainFilePath: ModuleMainFilePath = { componentMap: {}, pluginMap: {}, configMap: {}, @@ -32,9 +32,16 @@ export default class Core { public async init() { this.moduleMainFilePath = resolveAppPackages(this); + if (typeof this.options.onInit === 'function') { + this.moduleMainFilePath = await this.options.onInit(this); + } } public async prepare() { await prepareEntryFile(this); + + if (typeof this.options.onPrepare === 'function') { + this.options.onPrepare(this); + } } } diff --git a/packages/cli/src/types.ts b/packages/cli/src/types.ts index 69df67d03..d989ea29d 100644 --- a/packages/cli/src/types.ts +++ b/packages/cli/src/types.ts @@ -1,3 +1,5 @@ +import type Core from './Core'; + export enum EntryType { CONFIG = 'config', VALUE = 'value', @@ -36,6 +38,14 @@ export interface NpmConfig { client?: 'npm' | 'yarn' | 'pnpm'; } +export interface ModuleMainFilePath { + componentMap: Record; + pluginMap: Record; + configMap: Record; + valueMap: Record; + eventMap: Record; +} + export interface UserConfig { source: string; temp: string; @@ -43,4 +53,6 @@ export interface UserConfig { componentFileAffix: string; cleanTemp: boolean; npmConfig?: NpmConfig; + onInit?: (app: Core) => ModuleMainFilePath | Promise; + onPrepare?: (app: Core) => void; } diff --git a/packages/cli/src/utils/resolveAppPackages.ts b/packages/cli/src/utils/resolveAppPackages.ts index 8347288b8..c5996e3fb 100644 --- a/packages/cli/src/utils/resolveAppPackages.ts +++ b/packages/cli/src/utils/resolveAppPackages.ts @@ -7,7 +7,7 @@ import fs from 'fs-extra'; import * as recast from 'recast'; import type App from '../Core'; -import { Entry, EntryType, NpmConfig, PackageType } from '../types'; +import { Entry, EntryType, ModuleMainFilePath, NpmConfig, PackageType } from '../types'; interface TypeAssertion { type: string; @@ -20,7 +20,7 @@ interface ParseEntryOption { indexPath: string; } -export const resolveAppPackages = (app: App) => { +export const resolveAppPackages = (app: App): ModuleMainFilePath => { const componentMap: Record = {}; const configMap: Record = {}; const eventMap: Record = {};