You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不启动NestJS服务的情况下生成Swagger JSON文件

存在无需启动NestJS HTTP服务即可生成Swagger JSON的成熟方案,你已经写好的@nestjs/swagger装饰器标注不需要做任何修改,具体实现方式如下:

官方原生方案(推荐)

@nestjs/swagger本身就内置了脱离HTTP服务生成文档的能力,不需要额外安装依赖,可以完全复用你项目里现有的Swagger配置逻辑:

  • 新建独立生成脚本,例如scripts/generate-swagger.ts
  • 脚本内仅初始化Nest应用上下文,不调用listen()方法启动端口监听,直接生成Swagger文档对象后写入本地文件即可

参考代码:

import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from '../src/app.module';
import * as fs from 'node:fs';

async function run() {
  // 初始化Nest应用容器,不绑定端口、不启动对外服务
  const app = await NestFactory.create(AppModule, { logger: false });

  // 复用你项目里原有的Swagger配置即可
  const swaggerConfig = new DocumentBuilder()
    .setTitle('项目API文档')
    .setVersion('1.0')
    .build();
  const swaggerDoc = SwaggerModule.createDocument(app, swaggerConfig);

  // 将生成的JSON结构写入本地文件
  fs.writeFileSync('./swagger.json', JSON.stringify(swaggerDoc, null, 2));

  await app.close();
}

run();

在package.json中添加执行脚本:"gen:swagger": "ts-node scripts/generate-swagger.ts",运行该命令即可直接在项目根目录得到完整的Swagger JSON文件。
这个方案本质是只加载Nest依赖注入容器、读取所有装饰器元数据,不会启动网络监听,执行速度快,和你启动服务后访问/api-json拿到的内容完全一致。

第三方CLI工具方案

如果不想手写生成脚本,可以使用专门的静态生成工具:

  • 支持nestjs-swagger-cli这类命令行工具,静态扫描项目中的控制器、DTO和Swagger装饰器元数据,不需要初始化Nest应用上下文,生成速度更快,支持输出JSON、YAML两种格式的规范文件。
  • 注意:如果你的项目存在大量动态模块、自定义元数据逻辑,优先选择官方原生方案,静态扫描工具可能出现元数据识别遗漏的问题。

提示:如果需要在CI/CD流程中自动生成文档,官方原生方案的兼容性最好,不需要额外适配服务启动的端口检测、健康检查逻辑。

内容的提问来源于stack exchange,提问作者sroool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:51:22