73

I'm currently using ts-node with express in production and it's working well so far. Is there any reason that I should compile and run .js instead?

Elect2
  • 1,349
  • 2
  • 12
  • 22
  • Performance, specifically startup time, will likely improve. – Aluan Haddad Mar 07 '20 at 20:12
  • @AluanHaddad in my case ~200 project files it is only x2 better. Not sure is it worth considering additional problems like paths (tsconfig-paths) – l00k Oct 06 '22 at 09:13

3 Answers3

92

According to Blake Embrey, the author of ts-node, you can use it in production BUT you should use it with the --transpile-only flag.

Example:

ts-node --transpile-only ./src/start.ts

If you are compiling with transpile only, it will have a lower memory footprint as no type information will be generated. However, it can come to problems when you are using reflect-metadata (with experimental support for decorators).

In short: Use ts-node --transpile-only (there is also ts-node-transpile-only) in production when you are not using reflect-metadata. Otherwise, use tsc in combination with classic node.

Benny Code
  • 51,456
  • 28
  • 233
  • 198
23

No you shouldn't use it in production, even though it will cache the compiled files it'll be slower to start and consume more memory because it keeps around an instance of the compiler and files in memory.

It's better practice to compile the files beforehand with whatever build tooling you're using to make sure builds actually pass if for some reason your development environment and production might differ (this depends how your workflow looks like).

One case might be that you want to stop deployment if the app fails to actually build before deploying it and trying to run it and replace the running instance. An example might look like:

yarn
yarn build // tsc index.ts (possibly returns 1, stop build and output error)
yarn start // node index.js
3066d0
  • 1,853
  • 1
  • 14
  • 18
  • this is true, there are some instances where tsnode will not run but the tsc will not compile. – manit Jan 10 '23 at 17:50
-11

You should build the server on your dockerfile and for development mix tsc + nodemon.

https://github.com/TypeStrong/ts-node As they said in their docs "Is currently experimental".