Scaffold CLI

Scaffold CLI

Generador de línea de comandos que crea módulos de feature completamente integrados para nuestro starter interno de Next.js, con tests y stories incluidos.

Node.jsTypeScriptCommander.jsHandlebarsVitest
Ver en vivoVer repositorio

El problema

Cada nueva feature en el equipo empezaba con los mismos 20 minutos de copiar y pegar una ruta, un componente, un archivo de test y una story de Storybook desde una feature existente, para luego renombrar todo a mano. Quería un CLI que generara todo eso correctamente en un solo comando.

Rol e impacto

Decisiones técnicas y desafíos

Los templates de texto plano quedan desactualizados en cuanto cambian las convenciones del starter, porque nadie se acuerda de actualizar el generador junto con el código. Comparé mantener templates estáticos contra generar los templates directamente a partir de un módulo de feature "de referencia" ya existente en el repo.

Elegí generar los templates a partir de un módulo de referencia vivo con tokens de reemplazo, porque actualizar las convenciones del starter una sola vez, en código real, mantiene el generador correcto automáticamente, en vez de depender de que alguien recuerde actualizar un archivo de template separado.

Un generador que sobrescribe archivos a ciegas es peligroso en cuanto alguien lo vuelve a correr sobre una carpeta que ya empezó a editar. Evalué sobrescribir siempre con una advertencia contra mostrar un preview de diff en modo dry-run antes de cualquier escritura.

Terminé exigiendo un preview de diff en dry-run por defecto, con un flag explícito --write para aplicar los cambios, ya que las sobrescrituras silenciosas eran el modo de fallo más peligroso para una herramienta pensada para ahorrar tiempo, no para crear incidentes.

Stack detallado

CapaTecnologíaPor qué
CLINode.js, Commander.jsParsing de comandos y subcomandos simple y bien documentado
TemplatingHandlebarsTemplates legibles con helpers para casing y pluralización
TestingVitestSnapshot tests sobre el output generado para cada template

Galería

Salida de terminal mostrando archivos generados para una nueva featurePreview de diff en dry-run antes de escribir archivos

Qué haría diferente

Agregaría un modo interactivo para elegir qué piezas generar (ruta, tests, stories) en vez de generar siempre el set completo. Ahora mismo, una feature que no necesita una story de Storybook igual recibe una, que alguien después tiene que acordarse de borrar.