@application-kit/bootstrap

中文文档
0.4.0发布于 2026/11/08MITTypeScriptESM + CJS近 30 天下载 1804

Бутстрап процессов NestJS: web на Fastify с периметром (доверенные прокси по хопам, request-id в каждом ответе, cookie, ValidationPipe с плоским списком ошибок, graceful shutdown), consumer с сервером метрик, CLI на nestjs-console с логгером pino; порты и

原始使用文档
文档目录7 节
  1. Установка
  2. Входы
  3. Окружение
  4. Web
  5. Swagger
  6. Consumer
  7. CLI

@application-kit/bootstrap

Бутстрап процессов NestJS: web на Fastify с периметром, consumer с сервером метрик и CLI на nestjs-console. Состав модулей, контроллеры документа Swagger и хуки метрик знает приложение: пакет собирает процесс из его корневого модуля и опций. Порт, число прокси и порт метрик — переменные окружения контракта чарта; невалидное значение роняет старт.

Установка

yarn add @application-kit/bootstrap

Peer-зависимости — @nestjs/common, @nestjs/core, nestjs-pino; остальные optional и нужны только своему входу. @application-kit/observability пакет приносит сам. Логгер обоих входов — nestjs-pino: его LoggerModule обязан быть в графе корневого модуля.

Входы

ВходДля чегоТянет
@application-kit/bootstrap/webwebBootstrap, createFastifyApplication — web-процесс на Fastify@nestjs/platform-fastify, @fastify/cookie, class-validator, class-transformer, @opentelemetry/api, @libs-for-dev/nestjs-config-module
@application-kit/bootstrap/consumerconsumerBootstrap — процесс-консьюмер без HTTP-слояclass-validator, class-transformer, @libs-for-dev/nestjs-config-module
@application-kit/bootstrap/clicliBootstrap — CLI-процессnestjs-console
@application-kit/bootstrap/swaggersetupSwagger — документ OpenAPI web-процесса по выключателю@nestjs/swagger, class-validator, class-transformer, @libs-for-dev/nestjs-config-module

Корневого входа нет: web-процессу nestjs-console не нужен, CLI — Fastify.

Окружение

ПеременнаяПроцессПо умолчанию
PORTweb3000порт listen на 0.0.0.0
TRUST_PROXY_HOPSweb0сколько прокси перед приложением доверенные; 0 — только сокет
METRICS_PORTconsumer3001порт отдельного сервера /metrics
SWAGGER_ENABLEDwebfalseпубликовать ли документ setupSwagger; выключают false, 0 и пустая строка

Значение числовых переменных — целое не меньше 0 (порт — не больше 65535). Иное (abc, 1.5, -1) — ClassValidationError с именем переменной до создания приложения: Number('abc') дал бы NaN, и доверенных прокси молча стало бы ноль.

Web

import { webBootstrap } from '@application-kit/bootstrap/web'

void webBootstrap(AppModule, {
  configure: (app) => {
    setupMetricsHooks(app)
  },
})

webBootstrap берёт порт и прокси из окружения, собирает приложение через createFastifyApplication, слушает и возвращает его. createFastifyApplication — для своего запуска, когда порт и прокси приходят не из окружения:

import { createFastifyApplication } from '@application-kit/bootstrap/web'

const app = await createFastifyApplication(AppModule, {
  configure: (app) => {
    setupMetricsHooks(app)
  },
  trustProxyHops: 2,
})
await app.listen(port, '0.0.0.0')

Периметр, который ставит пакет, по порядку:

  1. Fastify-адаптер: genReqId — x-request-id от прокси либо свой UUID (fastifyRequestId из @application-kit/observability/logging); доверенные прокси — первые trustProxyHops прыжков справа в X-Forwarded-For, так что адрес, подсунутый клиентом слева, request.ip не подменяет.
  2. @fastify/cookie с опциями cookie.
  3. Хук onRequest: заголовок x-request-id на каждый ответ, включая 404 и ошибки парсинга тела.
  4. configure(app) — настройка продукта.
  5. LoggerErrorInterceptor и логгер nestjs-pino для Nest; uncaughtException — в тот же лог.
  6. Shutdown hooks: по SIGTERM/SIGINT провайдеры закрываются, HTTP-сервер дожидается открытых соединений.
  7. Глобальный ValidationPipe с transform: true: невалидный DTO — статус validationErrorStatus и тело { statusCode, validationErrors: [{ property, constraints }] }, вложенное поле — путём parent.child.
ОпцияПо умолчанию
trustProxyHops0сколько прокси перед приложением доверенные; 0 — только сокет
validationErrorStatus422статус ответа на невалидный DTO
cookie{}опции @fastify/cookie; false — плагин не регистрируется
configure—(app) => void, зовётся после хука request-id, до интерцептора и пайпа

Swagger

import { setupSwagger } from '@application-kit/bootstrap/swagger'

const options = {
  configure: (app) => {
    setupSwagger(app, { include: [HealthHttpModule, MetricsHttpModule] })
  },
} satisfies FastifyApplicationOptionsInterface

Документ описывает всю серверную поверхность и аутентификации не требует, поэтому без SWAGGER_ENABLED он не публикуется. В документ попадают контроллеры модулей из include, operationId — имя метода. UI отдаётся по path (по умолчанию swagger), JSON — по <path>-json, версия в info — version (по умолчанию 1.0).

Consumer

import { consumerBootstrap } from '@application-kit/bootstrap/consumer'
import { kafkaConsumerServer } from '@application-kit/kafka'

void consumerBootstrap(ConsumerModule, kafkaConsumerServer)

Сервер /metrics поднимается на METRICS_PORT со своим реестром метрик процесса, затем корневой модуль уходит транспорту вместе с логгером nestjs-pino. Транспорт передаёт приложение: от брокера пакет не зависит.

CLI

import { cliBootstrap } from '@application-kit/bootstrap/cli'

void cliBootstrap(CliModule)

Команда берётся из process.argv, после неё приложение закрывается. Упавшая команда — запись уровня error с context: 'Console process failed.' и код выхода 1: cron и джоба кластера видят провал только по коду. Корневой модуль импортирует ConsoleModule из nestjs-console.

版本与发布记录

@application-kit/bootstrap 共发布 9 个版本,首次发布于 2026/10/18;过去 12 个月发布了 9 个版本。

版本发布日期距今
0.4.0latest2026/11/08今天
0.3.02026/11/061 天前
0.2.42026/11/043 天前
0.2.32026/11/035 天前
0.2.22026/10/2216 天前
0.2.12026/10/2217 天前

关于 @application-kit/bootstrap 的常见问题

@application-kit/bootstrap 是什么?

Бутстрап процессов NestJS: web на Fastify с периметром (доверенные прокси по хопам, request-id в каждом ответе, cookie, ValidationPipe с плоским списком ошибок, graceful shutdown), consumer с сервером метрик, CLI на nestjs-console с логгером pino; порты и

如何安装 @application-kit/bootstrap?

在项目目录运行 npm install @application-kit/bootstrap,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:nestjs-pino(^4.6.1)、@nestjs/core(^11.0.0)、@nestjs/common(^11.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@application-kit/bootstrap 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@application-kit/bootstrap 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@application-kit/bootstrap 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@application-kit/bootstrap 可以商用吗?

@application-kit/bootstrap 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@application-kit/bootstrap 的下载量有多少?

根据 npm 官方下载统计,@application-kit/bootstrap 在 2026/10/07 – 2026/11/05 这 30 天内被下载 1,804 次,日均约 60 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@application-kit/bootstrap 还在维护吗?

最新版本 0.4.0 发布于 2026/11/08(今天);至今共发布 9 个版本,其中过去 12 个月发布了 9 个;首次发布于 2026/10/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。