如果没有 运行 处于 "watch" 模式的 TypeScript 编译器,Deno 启动速度如何?

How is Deno startup fast without running the TypeScript compiler in "watch" mode

据我所知,Deno 总是在启动时将 TypeScript 编译为 JS,并且没有 "watch" 模式。 这也是我的理解,除了 TS watch 模式之外,TypeScript 没有 "incremental compilation" 这样的东西。所以,要想快速编译TS,就必须使用watch模式。

所以我希望 Deno 有手表模式。但事实并非如此。那么 Deno 的 TS 编译速度如何?

注意:我知道Deno 使用了tsc 的V8 快照,这样tsc 启动很快,但是对于大型TS 项目,tsc 的启动时间与实际编译时间相比会相形见绌。所以我不是在问 V8 快照,我是在问 Deno 使用了哪些其他技巧。它使用构建守护进程吗?

Deno 在磁盘上缓存来自 TypeScript 的转译输出,并在本地源文件未更改(或远程模块缺少 --reload 标志)的情况下将其用于后续的模块请求。

从 Deno 0.2.8 开始,当需要转译 TypeScript 模块时,TypeScript 会延迟实例化。 Deno 逐个模块而不是整个项目进行转译,并缓存每个单独模块的结果。因此,当仅对单个文件进行更改时,只会转译该模块。

由于这种单文件方法,它确实意味着您有时会 运行 进入 运行 TypeScript 编译器会捕获的时间错误。如果你想确保你的程序从类型的角度来看是完全一致的,使用--recompile会导致每个模块都被重新编译。

可以添加手表功能,但这将是一个功能请求。但是,由于 运行time 环境的工作方式,处理此类功能存在重大挑战。