Actualmente estoy usando ts-node con express en producción y hasta ahora funciona bien. ¿Hay alguna razón por la que debería compilar y ejecutar .js en su lugar?
No, no debe usarlo en producción, aunque almacenará en caché los archivos compilados, será más lento para iniciar y consumirá más memoria porque mantiene una instancia del compilador y los archivos en la memoria.
Es una mejor práctica compilar los archivos de antemano con cualquier herramienta de compilación que esté utilizando para asegurarse de que las compilaciones realmente pasen si, por alguna razón, su entorno de desarrollo y producción pueden diferir (esto depende de cómo se vea su flujo de trabajo).
Un caso podría ser que desee detener la implementación si la aplicación no se compila antes de implementarla e intentar ejecutarla y reemplazar la instancia en ejecución. Un ejemplo podría verse como:
yarn yarn build // tsc index.ts (possibly returns 1, stop build and output error) yarn start // node index.jsDebe construir el servidor en su dockerfile y para el desarrollo mezclar tsc + nodemon.
https://github.com/TypeStrong/ts-node Como dijeron en sus documentos "Actualmente es experimental".
Según Blake Embrey, el autor de ts-node , puede usarlo en producción PERO debe usarlo con el --transpile-only .
Ejemplo:
ts-node --transpile-only ./src/start.ts Si está compilando solo con transpile, tendrá una huella de memoria más baja ya que no se generará información de tipo. Sin embargo, puede haber problemas cuando usa reflect-metadata (con soporte experimental para decoradores).
En resumen: use ts-node --transpile-only (también existe ts-node-transpile-only ) en producción cuando no esté usando reflect-metadata . De lo contrario, use tsc en combinación con el node clásico.