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()):
// 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
}npx nestjs-docfy export --entry docfy-export.ts --out openapi.jsonL'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
| Option | Default | Description |
|---|---|---|
--entry <path> | (required) | .ts/.js file whose default export returns { app, document } |
--out <path> | stdout | Where to write the document |
--root <path> | . | Project root — where ts-node/tsconfig-paths are resolved from |
--quiet | false | Suppress informational output |
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.