Cómo monitorear ts-node y recargar al cambiar archivos: guía de errores

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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.ts


Y 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.ts


O, 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.ts


La 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

Blogs

Book Recommendations