在生产中使用 ts-node 是一种不好的做法吗?

Ele*_*ct2 16 typescript

我目前正在生产中使用带有 express 的 ts-node,到目前为止它运行良好。有什么理由我应该编译并运行.js吗?

Ben*_*uer 24

根据ts-node的作者 Blake Embrey 的说法,您可以在生产中使用它,但您应该将它与--transpile-only标志一起使用。

例子:

ts-node --transpile-only ./src/start.ts
Run Code Online (Sandbox Code Playgroud)

如果您仅使用 transpile 进行编译,它将具有较低的内存占用,因为不会生成任何类型信息。但是,在使用时可能会出现问题reflect-metadata(对装饰器提供实验性支持)。

总之:使用ts-node --transpile-only(也有ts-node-transpile-only)在生产时不使用reflect-metadata。否则,tsc与经典结合使用node


306*_*6d0 7

不,您不应该在生产中使用它,即使它会缓存已编译的文件,但启动速度会变慢并消耗更多内存,因为它在内存中保留了编译器和文件的实例。

如果由于某种原因您的开发环境和生产可能不同(这取决于您的工作流程的样子),最好使用您使用的任何构建工具预先编译文件,以确保构建确实通过。

一种情况可能是,如果应用程序在部署之前未能实际构建并尝试运行它并替换正在运行的实例,则您可能希望停止部署。一个示例可能如下所示:

yarn
yarn build // tsc index.ts (possibly returns 1, stop build and output error)
yarn start // node index.js
Run Code Online (Sandbox Code Playgroud)