docfy export
Start de eigen Nest-app van het project op en schrijft het OpenAPI-document weg, zonder een poort te binden of live infrastructuur nodig te hebben.
Waarom dit bestaat
Het enige dat SwaggerModule.createDocument() structureel nodig heeft, is een volledig geïnitialiseerde Nest-app: de DI-container moet elke provider oplossen voordat route- en DTO-metadata bestaat om te introspecteren.
Dat vereist geen .listen(). Er wordt geen poort gebonden.
In de praktijk is meestal ook geen live infrastructuur nodig: de meeste TypeOrmModule-, ioredis- en kafkajs-clients verbinden lazy in plaats van de bootstrap te blokkeren, dus werkt export meestal prima met database, Redis en Kafka allemaal uit.
Gebruik
Geef een klein entry-bestand op (dezelfde regels die je main.ts al heeft, minus .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.jsonInformatieve output gaat altijd naar stderr, nooit naar stdout, dus is het veilig om te pipen: npx nestjs-docfy export --entry docfy-export.ts > openapi.json.
Het contract van het entry-bestand
De default export is een async functie die { app, document } teruggeeft. export draait die in een gespawnd child process, serialiseert document, en roept daarna app.close() voor je aan.
Een .ts-entry heeft ts-node nodig als devDependency van je project (en ook tsconfig-paths, voor path-aliassen zoals @app/common).
Opties
| 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 |
Een provider met een echt eager, hard falende connectie in de constructor of onModuleInit profiteert niet van deze manier om infra te skippen. Niets in export kan veranderen hoe je eigen providers verbinden. Het vermijdt alleen het ene ding dat NestJS zelf niet nodig heeft: een open poort.