Cómo hacer que ts-node se recargue al cambiar archivos: análisis de errores reales
Imagina: estás escribiendo un servidor en TypeScript, ejecutas ts-node, haces un cambio — y no pasa nada. Tienes que detener el proceso manualmente, presionar Ctrl+C, volver a ejecutar. ¿Te suena familiar? Este problema ha acumulado miles de visitas en Stack Overflow, y con razón: configurar watch y reload para ts-node es todo un rompecabezas.
En este artículo no solo te daré una receta lista. Analizaremos los principales errores que cometen incluso desarrolladores experimentados, y te mostraré cómo evitarlos. Aprenderás por qué ts-node --watch no funciona "de fábrica", en qué ts-node-dev es mejor que el enfoque clásico, y cómo no afectar el rendimiento del servidor en el proceso.
¿Por qué ts-node no se recarga por sí solo?
Aclaremos esto de inmediato. ts-node no es un servidor de desarrollo. Es un transpilador de TypeScript a JavaScript que ejecuta código en el runtime de Node.js. No tiene un mecanismo incorporado para rastrear cambios en archivos (file watcher). Cuando escribes ts-node app.ts, simplemente ejecuta el archivo y finaliza.
Para obtener recarga automática al cambiar archivos, necesitas usar herramientas externas. Y aquí es donde comienza lo interesante.
Top 5 errores al configurar watch y reload para ts-node
He recopilado los errores más comunes que enfrentan los desarrolladores. Revisemos cada uno con ejemplos y soluciones.
Error #1: Usar la bandera --watch sin la herramienta correcta
Muchos escriben en la terminal:
ts-node --watch app.tsY se sorprenden de que no funcione. El problema es que ts-node no tiene la bandera --watch en su versión estándar. Este comando simplemente se ignora o genera un error.
Solución: Usa nodemon junto con ts-node. Aquí está el comando correcto:
npx nodemon --exec ts-node app.tsO, si prefieres guardarlo en package.json:
{ "scripts": { "dev": "nodemon --exec ts-node src/index.ts" }}Esto hará que nodemon monitoree los cambios en los archivos y reinicie ts-node cada vez que guardes.
Error #2: nodemon no detecta cambios en archivos .ts
Configuraste nodemon, guardas un archivo, pero no reacciona. ¿Por qué? Por defecto, nodemon solo monitorea archivos .js, .json y algunas otras extensiones. .ts no está en la lista.
Solución: Especifica las extensiones explícitamente:
nodemon --watch src --ext ts --exec ts-node src/index.tsLa bandera --watch src limita el área de monitoreo a la carpeta src (para no rastrear node_modules). Y --ext ts agrega los archivos TypeScript a la lista de extensiones monitoreadas.
También puedes crear un nodemon.json:
{ "watch": ["src"], "ext": "ts", "exec": "ts-node src/index.ts"}Error #3: Conflicto con tsconfig.json — module resolution incorrecto
Situación típica: usas ts-node con nodemon, pero al ejecutar obtienes errores como Cannot find module o Unknown file extension ".ts". La mayoría de las veces el problema está en la configuración de tsconfig.json.
Ejemplo de tsconfig.json problemático:
{ "compilerOptions": { "module": "ESNext", "moduleResolution": "bundler", "target": "ES2020" }}Problema: ts-node funciona en el entorno de Node.js, mientras que module: "ESNext" con moduleResolution: "bundler" están diseñados para empaquetadores como Webpa