From 4c94fa0a8fa0cbb9618017709bd2479629d4ac52 Mon Sep 17 00:00:00 2001 From: kevinyzheng Date: Thu, 10 Nov 2022 19:52:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(cli):=20=E5=A2=9E=E5=8A=A0=20hook.beforeWr?= =?UTF-8?q?iteEntry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/cli/src/types.ts | 3 +++ packages/cli/src/utils/prepareEntryFile.ts | 29 +++++++++++++--------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/cli/src/types.ts b/packages/cli/src/types.ts index b01b5d99..a0ef1e93 100644 --- a/packages/cli/src/types.ts +++ b/packages/cli/src/types.ts @@ -60,6 +60,9 @@ export interface UserConfig { npmConfig?: NpmConfig; /** 是否使用import()加载组件 */ dynamicImport?: boolean; + hooks?: { + beforeWriteEntry?: (genContentMap: Record, app: Core) => void; + }; onInit?: (app: Core) => ModuleMainFilePath | Promise; onPrepare?: (app: Core) => void; } diff --git a/packages/cli/src/utils/prepareEntryFile.ts b/packages/cli/src/utils/prepareEntryFile.ts index f08ab2d8..e8793c7d 100644 --- a/packages/cli/src/utils/prepareEntryFile.ts +++ b/packages/cli/src/utils/prepareEntryFile.ts @@ -3,21 +3,26 @@ import * as recast from 'recast'; import type App from '../Core'; import { EntryType } from '../types'; -export const prepareEntryFile = (app: App) => { +export const prepareEntryFile = async (app: App) => { const { componentMap = {}, pluginMap = {}, configMap = {}, valueMap = {}, eventMap = {} } = app.moduleMainFilePath; - const { componentFileAffix, dynamicImport } = app.options; + const { componentFileAffix, dynamicImport, hooks } = app.options; + const contentMap: Record = { + 'comp-entry.ts': generateContent(EntryType.COMPONENT, componentMap, componentFileAffix), + 'async-comp-entry.ts': generateContent(EntryType.COMPONENT, componentMap, componentFileAffix, dynamicImport), + 'plugin-entry.ts': generateContent(EntryType.PLUGIN, pluginMap), + 'async-plugin-entry.ts': generateContent(EntryType.PLUGIN, pluginMap, '', dynamicImport), + 'config-entry.ts': generateContent(EntryType.CONFIG, configMap), + 'value-entry.ts': generateContent(EntryType.VALUE, valueMap), + 'event-entry.ts': generateContent(EntryType.EVENT, eventMap), + }; - app.writeTemp('comp-entry.ts', generateContent(EntryType.COMPONENT, componentMap, componentFileAffix)); - app.writeTemp( - 'async-comp-entry.ts', - generateContent(EntryType.COMPONENT, componentMap, componentFileAffix, dynamicImport), - ); + if (typeof hooks?.beforeWriteEntry === 'function') { + await hooks.beforeWriteEntry(contentMap, app); + } - app.writeTemp('plugin-entry.ts', generateContent(EntryType.PLUGIN, pluginMap)); - app.writeTemp('async-plugin-entry.ts', generateContent(EntryType.PLUGIN, pluginMap, '', dynamicImport)); - app.writeTemp('config-entry.ts', generateContent(EntryType.CONFIG, configMap)); - app.writeTemp('value-entry.ts', generateContent(EntryType.VALUE, valueMap)); - app.writeTemp('event-entry.ts', generateContent(EntryType.EVENT, eventMap)); + Object.keys(contentMap).forEach((fileName: string) => { + app.writeTemp(fileName, contentMap[fileName]); + }); }; const generateContent = (