- Node.js fue mejorado para poder ejecutar archivos TypeScript directamente
- Ahora es posible ejecutar archivos
.tsde inmediato, sin configuración adicional ni transpilar - Los desarrolladores pueden mejorar su eficiencia de trabajo sin
tsconfig.jsonni instalar un bundler por separado - Esta función quedó incorporada oficialmente a partir de Node.js v22.18.0 (LTS)
- Se espera como resultado una frontera más difusa entre el desarrollo con JavaScript y TypeScript
Soporte de ejecución directa de TypeScript en Node.js
- Node.js introdujo recientemente en la versión v22.18.0 (LTS) una función que permite ejecutar directamente archivos TypeScript (.ts) sin configuración ni herramientas adicionales
- Antes, para ejecutar código TypeScript se necesitaban transpiladores externos o bundlers como ts-node, esbuild o Babel, pero ahora Node.js reconoce y ejecuta código TypeScript por sí mismo sin esas herramientas
- Gracias a esta función, los desarrolladores pueden ejecutar archivos
.tsdirectamente en Node.js sin archivo de configuracióntsconfig.jsonni librerías adicionales - La productividad y la facilidad de desarrollo aumentan considerablemente en prototipado, desarrollo experimental y ejecución de scripts
- Se espera que esto fortalezca la integración entre proyectos JavaScript y TypeScript, y reduzca la barrera de entrada para nuevos desarrolladores
Otros cambios destacados
- esm: implementación de
import.meta.main - fs: mejoras en el manejo de eventos de fs basado en AsyncIterator
- permission: soporte para pasar flags del modelo de permisos al ejecutar subprocesos
- sqlite: se agregó la opción
readBigInts - src/permission: soporte para
permission.has(addon) - url: se agregó la API
fileURLToPathBuffer - watch: se agregó el flag
--watch-kill-signal - worker: el objeto
Workerfue mejorado como async disposable
Actualizaciones relacionadas con commits y documentación
- Incluye eliminación de código innecesario, ajustes al entorno de compilación y la cadena de herramientas, y actualización a npm 10.9.3
- Correcciones en indicadores detallados de estabilidad y números RFC en documentación como
globals.md,child_process.mdyhttp2 - Se reflejan múltiples pruebas añadidas y correcciones de errores
Archivos de distribución
- Se ofrecen instaladores y binarios para Windows, macOS (Intel/Apple Silicon) y Linux (x64, ARM, PPC, s390x, AIX)
- El código fuente y los archivos completos de la versión pueden descargarse desde la página oficial de distribución de Node.js
- La documentación de la API fue actualizada con base en la versión v22.18.0
7 comentarios
Ay, qué alivio... ojalá se adopte rápido.
Parece que puede estar bien para ejecutar scripts simples, pero para proyectos en producción tiene muchas limitaciones, así que no parece que vaya a usarse mucho.
También hay que ajustar bien las extensiones y las rutas por errores como
ERR_MODULE_NOT_FOUND/ERR_UNSUPPORTED_DIR_IMPORT,y además no se pueden usar funciones que requieren compatibilidad de compilación de TypeScript con configuraciones como
emitDecoratorMetadata, como en NestJS, así que...¿Entonces
--experimental-strip-typesse aplica por defecto?Como de todos modos no uso
enum, para mí con simplemente eliminar los tipos ya funcionó bastante bien.¡Se va a volver muchísimo más cómodo!
No puedo contener mi pulgar arriba.
Aunque ya me parecía bastante bueno con la bandera
--no-experimental-strip-types.Parece aún mejor.
Comentarios en Hacker News
node:testen Node.js, ahora siento que Node.js ya es una opción predeterminada convincente en la mayoría de los casos. Ejecutar contsxya había sido una gran mejora en calidad de vida, pero seguía sin ser algo completo. Con herramientas como zod, ts-rest y trpc, las aserciones de tipos en tiempo de ejecución en los bordes ya se resuelven en gran medida, y hoy en día el desarrollo full-stack con Typescript se ha vuelto realmente fácil.tsdirectamente, e incluye un test runner integrado bastante bueno (con soporte para--watch). Los paquetes integrados también han mejorado. En el caso denode:fs/promises, por ejemplo, gracias atop-level await, el trabajo con bucles asíncronos se volvió mucho más fácil. Tomó mucho tiempo convencer a todos de adoptar algo realista, pero ahora de verdad se siente cómodo.ts. Creo que trpc y ts-rest son un tema completamente distinto. Se pueden usar ambos, pero en producción evito trpc porque no puedo ser dueño directo de las URL del API ni gestionar y deprecar de forma natural las URL antiguas. En el caso de ts-rest, normalmente prefiero compartir directamente zod y los tipos para gestionar yo mismo los pares de request/response del API. Y además, cada vez que veo que trpc es claramente una herramienta RPC pero lleva-resten el nombre, me molestatsx. Aunque elimines los tipos, JSX igual tiene que transformarse a JavaScript, así que esa parte me da curiosidad.mjs). Estuve algo alejado del ecosistema, así que me gustaría saber qué cambió después de esonode_modules(relacionado: documentación oficial de node.js). Entonces me pregunto qué pasa con las dependencias del proyecto. Escribí una librería para modelos de datos en Typescript y quisiera importarla en mi app tal cual en Typescript. Me pregunto si esta regla aplica solo a paquetes de npm o a todas las dependencias. Aquí hay una oportunidad. Yo hice un runtime basado en golang para ejecutar typescript (más exactamente JS en general), y parece que a sobek, que usa el equipo de grafana, solo le faltaría añadir la función de stripping de tipos. Siento que si aparece un solo runtime que adopte completamente Typescript por defecto, Node.js realmente se revolucionaría. No hacen falta transpilers, ni typescript-go, ni rust (aunque rust sí un poquito 😉), sino un buen parser con un sistema que siga source maps y tipos en modo de depuración. De todos modos, reconocimiento y agradecimiento al equipo de Node y a todos los contribuidores. Se siente que todos vamos detrás de Node por ser el estándar. El API de embedding también es simple y limpio de usar, así que es conveniente incluso al crear ejecutables independientesprivatenode_modulesrecursiveen las opciones deopendir. Estoy esperando a que Bun se ponga al día, pero hasta ahora no me parece listo para uso real en proyectos grandes. Las funciones exclusivas de bun también se ven bien de entrada, pero en la práctica se sienten flojas. La documentación tampoco tiene la calidad de la de Node.jslocalAddressen conexiones TCPnode_modulese instalar todo otra vezProbé las funciones de TS y del test runner de Node, pero todavía no están al nivel de Bun. Por ahora sigo usando Bun cuando necesito ese tipo de funciones. En el ecosistema de Node aprendí que es mejor combinar herramientas especializadas en vez de apostarlo todo a una sola.
Bun.js: para el runtime de Node, y para ejecutar TS y pruebas. He probado de todo: TSX, TS-Node, el propio Node, etc.
NPM: para ejecutar scripts de tooling
PNPM: para instalar dependencias. (Me parece claramente superior a npm, yarn y bun)
Biome.js: para linting. Es mejor que cualquier otra herramienta de linting que haya usado hasta ahora
import { stripTypeScriptTypes } from 'node:module'). Para desarrollar una webapp simple sin dependencias de frontend, se puede hacer todo en typescript y al servir los scripts del frontend simplemente quitarles los tipos (proyecto de ejemplo)tsc, y la información de tipos se elimina. Python también ignora las type annotations en tiempo de ejecución, y Java igualmente borra cierta información de tipos, como algunos genéricos, en el bytecodetscme funciona perfectotsx, que también permite ejecutar sin build/transpile. Durante el desarrollo es muy útil. Gracias a--watchdetsx, levanto el servidor directamente desde el código fuente TS y se reinicia automáticamente cuando hay cambios. Ahora quizá se pueda armar un entorno parecido solo con nodemon y funciones integradas de Node. Para hacer type-checking en runtime haría falta soporte a nivel de v8, y eso sería casi una reescritura completaenum, pregunto qué casos reales de uso hay que la gente de verdad use