{"_id":"@backendkit-labs/nest-deploy","name":"@backendkit-labs/nest-deploy","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@backendkit-labs/nest-deploy","version":"0.1.0","license":"Apache-2.0","author":{"name":"BackendKit Labs","email":"hello@backendkitlabs.dev"},"homepage":"https://backendkitlabs.dev/docs/nest-deploy/","repository":{"type":"git","url":"git+https://github.com/BackendKit-labs/backendkit-monorepo.git","directory":"packages/nest-deploy"},"description":"CLI de deploy para servicios NestJS — empaqueta dist, instala dependencias de produccion, corre migraciones y genera ZIP","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","bin":{"nest-deploy":"dist/bin/nest-deploy.js"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","typecheck":"tsc --noEmit","lint":"eslint src/ bin/","format":"prettier --write src/ bin/","prepublishOnly":"npm run build && npm run test && npm run lint"},"keywords":["nestjs","deploy","cli","typeorm","migrations","pm2","packaging"],"bugs":{"url":"https://github.com/BackendKit-labs/backendkit-monorepo/issues"},"publishConfig":{"access":"public"},"engines":{"node":">=18"},"devDependencies":{"@eslint/js":"^9.39.4","@types/node":"^22.0.0","eslint":"^9.0.0","prettier":"^3.0.0","tsup":"^8.0.0","typescript":"^5.5.0","typescript-eslint":"^8.59.3","vitest":"^2.0.0"},"gitHead":"5e0fa1fa5f1ca51e2f01b6b68bcaa2a19e23cb3c","_id":"@backendkit-labs/nest-deploy@0.1.0","_nodeVersion":"24.16.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-T/Ga55GCXY1wwTfqFK09/m5ociUE0TtUaXjUG2nPraQAt+yXrH7Wsw1TIA/38sSW3MFWKF27kOP+T4Iy7EZ0sA==","shasum":"e37620d27f85e2ec018e682682de066ea1b02ee2","tarball":"https://registry.npmjs.org/@backendkit-labs/nest-deploy/-/nest-deploy-0.1.0.tgz","fileCount":9,"unpackedSize":57246,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDxDTXsJo9NGkiKQY92VxDxP0X+qqbqrVw4koU/fYYfJgIhAKQAeyR018aaCC6Ej4FniZtyoH7jqzx/RDU5CiczVS8P"}]},"_npmUser":{"name":"backendkit.dev","email":"backendkit.dev@gmail.com"},"directories":{},"maintainers":[{"name":"backendkit.dev","email":"backendkit.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nest-deploy_0.1.0_1781129274409_0.016830868632465412"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-10T22:07:54.262Z","0.1.0":"2026-06-10T22:07:54.576Z","modified":"2026-06-10T22:07:54.804Z"},"maintainers":[{"name":"backendkit.dev","email":"backendkit.dev@gmail.com"}],"description":"CLI de deploy para servicios NestJS — empaqueta dist, instala dependencias de produccion, corre migraciones y genera ZIP","homepage":"https://backendkitlabs.dev/docs/nest-deploy/","keywords":["nestjs","deploy","cli","typeorm","migrations","pm2","packaging"],"repository":{"type":"git","url":"git+https://github.com/BackendKit-labs/backendkit-monorepo.git","directory":"packages/nest-deploy"},"author":{"name":"BackendKit Labs","email":"hello@backendkitlabs.dev"},"bugs":{"url":"https://github.com/BackendKit-labs/backendkit-monorepo/issues"},"license":"Apache-2.0","readme":"# @backendkit-labs/nest-deploy\n\nCLI de deploy para servicios NestJS. Compila el proyecto, empaqueta los archivos necesarios, instala dependencias de producción, corre migraciones TypeORM y genera un ZIP listo para subir al servidor.\n\n## Instalación\n\n```bash\nnpm install --save-dev @backendkit-labs/nest-deploy\n```\n\n## Configuración\n\nCrear un archivo `deploy.config.js` en la raíz del proyecto:\n\n```js\n/** @type {import('@backendkit-labs/nest-deploy').DeployConfig} */\nmodule.exports = {\n  name: 'api-middleware-service',\n  environments: ['staging', 'production'],\n  extraFiles: [],\n  migrations: true,\n  outputDir: '../',\n  zip: true,\n};\n```\n\n### Opciones\n\n| Campo | Tipo | Requerido | Default | Descripción |\n|---|---|---|---|---|\n| `name` | `string` | Sí | — | Nombre del servicio. Se usa como prefijo del directorio de salida |\n| `environments` | `string[]` | Sí | — | Entornos válidos. Debe existir un `.env.<entorno>` para cada uno |\n| `extraFiles` | `string[]` | No | `[]` | Archivos o carpetas adicionales a incluir en el paquete |\n| `migrations` | `boolean` | No | `false` | Si es `true`, corre `npm run migration:run:dist` antes de generar el ZIP |\n| `outputDir` | `string` | No | `'../'` | Directorio base donde se genera el paquete (relativo a la raíz del proyecto) |\n| `zip` | `boolean` | No | `true` | Si es `true`, genera un `.zip` además de la carpeta |\n\n## Requisitos del proyecto\n\nPara que el CLI funcione correctamente el proyecto debe tener:\n\n- `npm run build` — compila el proyecto a `dist/`\n- `.env.<entorno>` — archivo de variables de entorno por entorno\n- `ecosystem.config.js` — configuración de PM2 (opcional pero recomendado)\n\nSi `migrations: true`, también necesita:\n\n- `npm run migration:run:dist` — corre las migraciones desde el compilado\n\n```json\n// package.json\n{\n  \"scripts\": {\n    \"migration:run:dist\": \"typeorm migration:run -d dist/database/data-source.js\"\n  }\n}\n```\n\nY el `data-source.ts` debe usar rutas relativas a `__dirname` para que funcione desde `dist/`:\n\n```ts\nmigrations: [path.join(__dirname, '../migrations/*.{ts,js}')],\n```\n\n## Uso\n\nAgregar el script en `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"deploy\": \"nest-deploy\"\n  }\n}\n```\n\n### Modo interactivo\n\n```bash\nnpm run deploy\n```\n\nEl CLI pregunta el entorno y muestra las rutas de destino antes de ejecutar:\n\n```\n================================================\n  @backendkit-labs/nest-deploy\n================================================\n\nEntorno [staging / production]: staging\n\n  Servicio : api-middleware-service\n  Entorno  : staging\n  Destino  : /workspace/api-middleware-service-deploy-staging-20260610\n  ZIP      : /workspace/api-middleware-service-deploy-staging-20260610.zip\n\nConfirmar? [s/n]: s\n\n[07:30:00] Compilando el proyecto (npm run build)...\n  OK: Build completado\n\n[07:30:18] Copiando archivos...\n  OK: dist/\n  OK: package.json\n  OK: package-lock.json\n  OK: ecosystem.config.js\n  OK: .env.staging\n\n[07:30:19] Instalando dependencias de produccion (npm install --omit=dev)...\n  OK: node_modules instalado\n\n[07:31:10] Ejecutando migraciones (migration:run:dist)...\n  OK: Migraciones aplicadas\n\n[07:31:12] Creando api-middleware-service-deploy-staging-20260610.zip...\n  OK: api-middleware-service-deploy-staging-20260610.zip\n\n================================================\n  Paquete generado exitosamente\n================================================\n  Carpeta : /workspace/api-middleware-service-deploy-staging-20260610\n  ZIP     : /workspace/api-middleware-service-deploy-staging-20260610.zip\n\n  Para iniciar en el servidor:\n    npm run migration:run:dist   # solo si hay migraciones pendientes\n    pm2 start ecosystem.config.js --env staging\n    pm2 save\n```\n\n### Modo argumento (CI/scripts)\n\n```bash\nnpm run deploy -- staging\nnpm run deploy -- production\n\n# o directamente\nnpx nest-deploy staging\nnpx nest-deploy production\n```\n\nEn modo argumento no pide confirmación — útil para pipelines de CI/CD.\n\n## Contenido del paquete generado\n\n```\n<name>-deploy-<env>-<fecha>/\n├── dist/                  ← código compilado\n├── node_modules/          ← solo dependencias de runtime\n├── package.json\n├── package-lock.json\n├── ecosystem.config.js\n└── .env.<entorno>\n```\n\n## Iniciar en el servidor\n\nSubir la carpeta o el ZIP al servidor y ejecutar:\n\n```bash\n# Solo si hay migraciones nuevas\nnpm run migration:run:dist\n\n# Levantar con PM2\npm2 start ecosystem.config.js --env staging\npm2 save\npm2 startup\n```\n\n## Uso con múltiples servicios\n\nCada servicio del ecosistema tiene su propio `deploy.config.js`. La librería se instala como devDependency en cada uno.\n\n```\napi-middleware-service/\n├── deploy.config.js   → { name: 'api-middleware-service', migrations: true }\n\napi-gateway/\n├── deploy.config.js   → { name: 'api-gateway', migrations: false }\n\nabac-microservice/\n├── deploy.config.js   → { name: 'abac-microservice', migrations: true }\n```\n\nTodos comparten el mismo flujo: `npm run deploy`.\n","readmeFilename":"README.md","_rev":"1-6981c34ded778dc98afb53e439d06474"}