【问题标题】:Is there a need to compile my backend typescript code for production?是否需要为生产编译我的后端打字稿代码?
【发布时间】:2022-11-22 23:43:00
【问题描述】:

我知道标题看起来很愚蠢,但听我说完,如果我们有一个不能在浏览器上运行的打字稿文件,那为什么还需要编译它呢?我的意思是它已经运行而至少在开发中没有编译,所以不需要编译它。

也许在生产方面有一些我不知道的东西,但据我目前所知,没有必要编译它。

【问题讨论】:

  • 浏览器/NodeJS 无法理解 typescript 文件,因此您必须将其编译为 javascript。在开发中,您的构建系统会在后台自动为您执行此操作。另请注意,没有任何 typescript 语法的 typescript 文件可以在浏览器/节点内运行而无需编译,因为它只剩下 JS 代码。

标签: typescript


【解决方案1】:

我的意思是它已经运行而至少在开发中没有编译,所以不需要编译它。

这种假设是不准确的。

在开发中运行,无论是 Nest 还是 ts-node 还是 deno 都在后台将 TypeScript 转译为 JavaScript:

[ts-node] JIT 将 TypeScript 转为 JavaScript,无需预编译即可直接在 Node.js 上执行 TypeScript。ts-node Readme

在高层次上,Deno 将 TypeScript(以及 TSX 和 JSX)转换为 JavaScript。Deno docs

虽然我在 Nest Docs 中找不到关于此主题的任何内容,但 typescript 包是 Nest CLI 的直接依赖项,表明它不仅用于开发(而且在 CLI 本身中用于编译项目)粗略地浏览一下 CLI 的代码库,还可以看出项目在执行之前正在编译(通过 Webpack 或 TS)。


回答标题中的问题:不一定。我过去曾使用 ts-node 在生产环境中运行过一个项目。

我会推荐它吗?不,不是真的。它是 JIT 编译的,这意味着当进程执行内容时,它会在执行之前即时删除内容,对性能没有真正的帮助。在开发中,这并不重要,ts-node-dev 及其监视功能非常有用,不必等待项目的完整编译,但对于生产,使用 JavaScript 而不是 TypeScript 是个好主意,尽管不是严格地必需的。

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 2018-07-03
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多