docfy export

Avvia l'app Nest del tuo progetto e scrive il documento OpenAPI, senza aprire una porta né richiedere infrastruttura live.

Perché esiste

L'unica cosa di cui SwaggerModule.createDocument() ha strutturalmente bisogno è un'app Nest completamente inizializzata: il suo container DI deve risolvere ogni provider prima che esistano metadati di rotte e DTO da introspettare.

Questo non richiede .listen(). Nessuna porta viene aperta.

In pratica di solito non serve nemmeno infrastruttura live: la maggior parte dei client TypeOrmModule, ioredis e kafkajs si connette in modo lazy invece di bloccare il bootstrap, quindi export tende a funzionare anche con database, Redis e Kafka tutti spenti.

Utilizzo

Fornisci un piccolo file di ingresso (le stesse righe che il tuo main.ts ha già, meno .listen()):

ts
// docfy-export.ts
import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';

export default async function () {
  const app = await NestFactory.create(AppModule, { logger: false });
  const config = new DocumentBuilder().setTitle('My API').setVersion('1.0.0').build();
  const document = SwaggerModule.createDocument(app, config);
  return { app, document }; // `app` gets closed for you afterward
}
bash
npx nestjs-docfy export --entry docfy-export.ts --out openapi.json

L'output informativo va sempre su stderr, mai su stdout, quindi è sicuro fare piping: npx nestjs-docfy export --entry docfy-export.ts > openapi.json.

Il contratto del file di ingresso

L'export di default è una funzione async che restituisce { app, document }. export la esegue in un child process dedicato, serializza document e chiama app.close() per te alla fine.

Un file di ingresso .ts richiede ts-node come devDependency del tuo progetto (e anche tsconfig-paths, per gli alias di percorso come @app/common).

Opzioni

OptionDefaultDescription
--entry <path>(required).ts/.js file whose default export returns { app, document }
--out <path>stdoutWhere to write the document
--root <path>.Project root — where ts-node/tsconfig-paths are resolved from
--quietfalseSuppress informational output
Quando questo non aiuta

Un provider con una connessione genuinamente eager e bloccante nel costruttore o in onModuleInit non trae beneficio da questo modo di saltare l'infrastruttura. Niente in export può cambiare come i tuoi provider si connettono. Evita solo l'unica cosa di cui NestJS stesso non ha bisogno: una porta aperta.