Max*_*ber 7 incremental-build typescript gulp-typescript
gulp-typescript的README说它支持渐进式编译,但没有解释在这种情况下该术语的含义.
有一个问题讨论gulp-typescript增量编译比tsc慢,但它没有解释原因,或者有什么区别.
什么是gulp-typescript在进行"增量编译"时所做的事情?
我正在查看gulp-typescript的源代码,看起来gulp-typescript根本没有进行任何增量编译.当Project被创建时,它关闭在的一个实例ProjectInfo,它有一个input构件,其是一个FileCache.FileCache几乎是从文件名到源字符串的映射.在gulp-typescript中维护的其他状态并不多Project.
为了使用TS编译器API进行实际的增量编译(在后续版本中重用编译过程的产品),我希望看到以下之一:
但我没有看到源头中的任何一个.
小智 6
Gulp-typescript 有两种不同的方式来编译你的文件。默认方法编译整个项目并进行类型检查。这是ProjectCompiler在lib/compiler.ts. 另一个单独编译每个文件,并在您设置isolatedModules: true. 该方法FileCompiler在lib/compiler.ts.
FileCompiler 只需要编译改变的文件。未更改的文件被缓存,就像 Achmedzhanov 在他的回答中描述的那样。
然而,大多数用户使用 ProjectCompiler,因为类型检查可能是他们使用 TypeScript 的原因。我认为您的问题与此 ProjectCompiler 有关。增量编译由ts.createProgramTypeScript API 导出的调用处理。通过传递旧程序,TypeScript API 将重用之前编译的一些信息。你可以在这里找到源代码:
这曾经足以进行增量编译,但在较新版本的 TypeScript 中已经发生了变化。我们将需要切换到新的 API,可能使用您提到的 API 之一,但我不熟悉这些。
在您的问题中,您提到了 FileCache。这用于存储在输入流中传递的所有文件。gulp API 即提供流中的所有文件,而 TypeScript API 是同步的。因此,我们需要等到我们拥有所有输入文件。此外,我们使用 FileCompiler 中的 FileCache 来检测文件是否已更改,从而是否需要重新编译它。
| 归档时间: |
|
| 查看次数: |
507 次 |
| 最近记录: |