| 681 | * @param options |
| 682 | */ |
| 683 | export async function createLightApp( |
| 684 | baseDirOrOptions: string | MockBootstrapOptions, |
| 685 | options: MockBootstrapOptions = {} |
| 686 | ): Promise<IMidwayApplication> { |
| 687 | if (baseDirOrOptions && typeof baseDirOrOptions === 'object') { |
| 688 | options = baseDirOrOptions; |
| 689 | baseDirOrOptions = options.baseDir || ''; |
| 690 | } |
| 691 | |
| 692 | Framework()(LightFramework); |
| 693 | options.globalConfig = Object.assign( |
| 694 | { |
| 695 | midwayLogger: { |
| 696 | default: { |
| 697 | disableFile: true, |
| 698 | disableError: true, |
| 699 | }, |
| 700 | }, |
| 701 | }, |
| 702 | options.globalConfig ?? {} |
| 703 | ); |
| 704 | |
| 705 | if (!options.moduleLoadType) { |
| 706 | const cwd = process.cwd(); |
| 707 | const pkgJSON = await loadModule(join(cwd, 'package.json'), { |
| 708 | safeLoad: true, |
| 709 | enableCache: false, |
| 710 | }); |
| 711 | |
| 712 | options.moduleLoadType = pkgJSON?.type === 'module' ? 'esm' : 'commonjs'; |
| 713 | } |
| 714 | |
| 715 | const app = await createApp(baseDirOrOptions as string, { |
| 716 | ...options, |
| 717 | imports: [ |
| 718 | await transformFrameworkToConfiguration( |
| 719 | LightFramework, |
| 720 | options.moduleLoadType |
| 721 | ), |
| 722 | ].concat(options?.imports), |
| 723 | }); |
| 724 | |
| 725 | const applicationManager = app |
| 726 | .getApplicationContext() |
| 727 | .get(MidwayApplicationManager); |
| 728 | const apps = applicationManager.getApplications(); |
| 729 | if (apps.length === 1) { |
| 730 | return app; |
| 731 | } else { |
| 732 | // 如果有多个 app,则重置 main app |
| 733 | const frameworkService = app |
| 734 | .getApplicationContext() |
| 735 | .get(MidwayFrameworkService); |
| 736 | // 这里调整是因为 createLightApp 会自动加一个 framework |
| 737 | frameworkService.setMainApp(apps[0].getNamespace()); |
| 738 | return frameworkService.getMainApp(); |
| 739 | } |
| 740 | } |