import 'reflect-metadata'; import { type INestApplication, type NestApplicationOptions } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import path from 'node:path'; import { loadApiProcessConfig } from '../../../libs/config/src/load-process-env'; import { toSafeRuntimeSummary, type ApiRuntimeConfig, } from '../../../libs/config/src/runtime-config'; import { ApiModule } from './api.module'; /** API 引导参数只接受已完成进程级校验的配置,测试可覆盖监听端口和日志器。 */ interface BootstrapApiOptions { config: ApiRuntimeConfig; port?: number; logger?: NestApplicationOptions['logger']; } /** 启动可独立部署的 API;配置由入口显式注入,监听前已完成全部校验。 */ export async function bootstrapApi(options: BootstrapApiOptions): Promise { const app = await NestFactory.create(ApiModule.register(options.config), { logger: options.logger, }); app.setGlobalPrefix('api/v1'); app.enableShutdownHooks(); await app.listen(options.port ?? options.config.api.port, options.config.api.host); return app; } async function runApi(): Promise { const config = loadApiProcessConfig(); console.info('API 进程启动配置', toSafeRuntimeSummary(config)); await bootstrapApi({ config }); } if (process.argv[1] && path.resolve(process.argv[1]) === path.resolve(__filename)) { void runApi(); }