Mejores Prácticas para la Configuración de Proyectos
Estándares para repositorios de servicios Node que se integran rápidamente, se construyen en CI y se despliegan de forma predecible.
Cómo Usar Esta Lista
- Aplícala al crear repositorios a partir de plantillas o generadores.
- Revísala durante las revisiones de arquitectura antes de añadir un segundo elemento desplegable.
- Haz cumplir el diseño y los scripts a través de la CI de la plantilla, no mediante convenciones informales.
A - Diseño del Repositorio
- Usa
src/para el código de tiempo de ejecución y una ubicación de prueba dedicada. Eligetest/o*.test.tscolocados juntos, no ambos. - Un elemento desplegable principal por carpeta de aplicación en monorepos.
apps/billing-apise asigna a una imagen de contenedor. - Mantén la configuración en la raíz del repositorio o en la raíz de la aplicación de forma consistente. La detectabilidad de
tsconfig, ESLint y Dockerfile es importante. - Haz commit de
.env.example, nunca de secretos. Documenta cada variable requerida con valores predeterminados seguros. - Incluye rutas
health(y opcionalmenteready) desde el primer día. Los balanceadores de carga y los orquestadores las necesitan.
B - TypeScript y Scripts
- Divide
tsconfig.jsonytsconfig.build.json. Verifica el tipo de las pruebas; emite solosrc/adist/. - Usa la resolución de módulos
NodeNexten Node 24. Coincide con el comportamiento deimportde ESM en producción. - Exporta
createApp()(o equivalente) desde los servidores. Permite pruebas de integración HTTP sin vincular puertos. - Scripts:
dev,build,start,test,typecheck. Los mismos comandos localmente y en CI. - Ejecuta
startde producción contra JS compilado. Notsxen contenedores.
C - Docker y Tiempo de Ejecución
- Fija el parche de Node en Dockerfile (
node:24.18.0-alpine). Alinéalo conenginesenpackage.json. - Compilaciones multi-etapa: dependencias, compilación, tiempo de ejecución. La imagen de producción excluye TypeScript y devDependencies.
- Copia el archivo de bloqueo antes del código fuente para la caché de capas. La capa
npm cise reconstruye solo cuando cambian las dependencias. - Establece
NODE_ENV=productionen la etapa de tiempo de ejecución. Los frameworks y la verbosidad de los logs dependen de ello. - Documenta el puerto expuesto y la ruta de salud en el README. Coincide con las sondas de K8s y los archivos compose.
D - Monorepo y Scaffolding
- Código compartido en
packages/, elementos desplegables enapps/. Las aplicaciones nunca importan aplicaciones hermanas directamente. - Mantén un repositorio de plantillas interno con CI. Los nuevos servicios heredan los pines actuales de Express/Fastify/Nest.
- Usa Turborepo o Nx cuando 3 o más paquetes necesiten orquestación. Los scripts de npm simples dejan de escalar.
- Filtra por ruta los despliegues de CI por servicio. Los cambios de API no relacionados no deben volver a desplegar la facturación.
- Versiona el paquete de contratos internos con disciplina de cambios disruptivos. Los cambios de esquema de Zod afectan a múltiples aplicaciones.
E - Documentación y Gobernanza
- Inicio rápido del README:
npm ci, copia de.env,npm run dev. Tres pasos para ejecutar el servidor. - Registra la elección del framework en ADR para nuevos servicios. Express vs Fastify vs Nest no es arbitrario por repositorio.
- Añade una prueba de ejemplo en el scaffold. La CI nunca se envía con un
npm testvacío que pasa trivialmente. -
.gitignorecubrenode_modules,dist,.env, coverage. Evita commits accidentales. - Renombra y limpia los marcadores de posición de la plantilla antes del primer despliegue. Los nombres de servicio predeterminados se propagan a las métricas y los logs.
Preguntas Frecuentes
¿Las pruebas deben vivir en test/ o src/?
Cualquiera de las dos funciona. test/ simplifica la salida de dist/; las pruebas colocadas juntas mejoran la localidad. Elige una por organización.
¿Cuándo adoptamos un monorepo?
Cuando dos elementos desplegables comparten contratos en evolución y quieres PRs atómicos. No para una sola API con ayudantes de copiar y pegar.
¿Se requiere un Dockerfile para cada servicio?
Sí, para despliegues en contenedores. Serverless usa configuración de empaquetado en su lugar, pero se aplican los mismos scripts de compilación/verificación de tipos.
¿Qué pertenece a un repositorio de plantillas?
Diseño, scripts, ESLint, prueba de ejemplo, Docker, flujo de trabajo de CI, .env.example y README, probados y validados en cada etiqueta.
¿Cómo manejamos múltiples versiones de Node durante la migración?
Amplía engines temporalmente, fija la matriz de CI, migra aplicación por aplicación y luego ajusta engine-strict.
¿Deberíamos hacer commit de dist/?
No para compilaciones de contenedores que se compilan en CI/Docker. Sí, solo para flujos atípicos de despliegue con git (evítalo si es posible).
¿Qué tan plana debe ser src/?
Agrupa por dominio (routes/, services/) no solo por capa. La profundidad crece con el número de características, no de antemano.
¿Los workers comparten el mismo diseño?
Sí: src/worker.ts, los mismos scripts, Dockerfile o comando de proceso separados. Reutiliza packages/ para cargas de trabajo.
¿Cómo encajan los entornos de vista previa?
Cada PR despliega una aplicación de apps/* con filtros de ruta; documenta la nomenclatura en los manuales de la plataforma.
¿Cuál es la verificación mínima de CI en el scaffold?
npm ci, npm run typecheck, npm test, npm run build, compilación de Docker (si se usa).
Relacionado
- Conceptos Básicos de Configuración de Proyectos - ejemplos de diseño
- Scaffolding de APIs - plantillas y CLIs
- Monorepo de Múltiples Servicios - reglas de aplicación vs paquete
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS Activo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.