From 1c757bd025f87efc954a9321a938fc744664a7e5 Mon Sep 17 00:00:00 2001 From: ChengLei Shao Date: Sun, 14 May 2023 16:48:53 +0800 Subject: [PATCH] feat: support running single sub app (#1853) --- packages/core/server/src/app-manager.ts | 15 ++++++++++++++- .../multi-app-manager/src/server/server.ts | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/core/server/src/app-manager.ts b/packages/core/server/src/app-manager.ts index 74e167afa..dabe30bea 100644 --- a/packages/core/server/src/app-manager.ts +++ b/packages/core/server/src/app-manager.ts @@ -8,9 +8,17 @@ type AppSelector = (req: IncomingMessage) => AppSelectorReturn | Promise = new Map(); public app: Application; + public runningMode: 'single' | 'multiple' = 'multiple'; + public singleAppName: string | null = null; constructor(app: Application) { this.bindMainApplication(app); + + // if STARTUP_SUBAPP is set, run in single mode + if (process.env.STARTUP_SUBAPP) { + this.singleAppName = process.env.STARTUP_SUBAPP; + this.runningMode = 'single'; + } } bindMainApplication(mainApp: Application) { @@ -72,7 +80,12 @@ export class AppManager { return async (req: IncomingMessage, res: ServerResponse) => { const appManager = this.app.appManager; - let handleApp: any = (await appManager.appSelector(req)) || appManager.app; + let handleApp; + if (this.runningMode === 'single') { + handleApp = this.singleAppName; + } else { + handleApp = (await appManager.appSelector(req)) || appManager.app; + } if (typeof handleApp === 'string') { handleApp = await appManager.getApplication(handleApp); diff --git a/packages/plugins/multi-app-manager/src/server/server.ts b/packages/plugins/multi-app-manager/src/server/server.ts index 5f34ae610..c351662c3 100644 --- a/packages/plugins/multi-app-manager/src/server/server.ts +++ b/packages/plugins/multi-app-manager/src/server/server.ts @@ -177,10 +177,22 @@ export class PluginMultiAppManager extends Plugin { this.app.on('afterUpgrade', async (app, options) => { const cliArgs = options?.cliArgs; + const repository = this.db.getRepository('applications'); - const instances = await repository.find(); + const findOptions = {}; + + const appManager = this.app.appManager; + + if (appManager.runningMode == 'single') { + findOptions['filter'] = { + name: appManager.singleAppName, + }; + } + + const instances = await repository.find(findOptions); + for (const instance of instances) { - const subApp = await this.app.appManager.getApplication(instance.name, { + const subApp = await appManager.getApplication(instance.name, { upgrading: true, });