如何使用 TypeScript 编译器 API 中的 --incremental ?

Max*_*ber 4 typescript typescript-compiler-api

TypeScript 最近添加了“--incremental”编译器选项。

如何将它与 TS 编译器 API 一起使用?

该程序不会生成 .tsbuildinfo 文件,第二次运行也不会更快:

import * as ts from "typescript";

const program = ts.createProgram(["./src/foo.ts"], {
    incremental: true,
    tsBuildInfoFile: "./tsbuildinfo"
});
const emit = program.emit();
console.log('emitted', JSON.stringify(emit)); // { emitSkipped: false, diagnostics: []}
Run Code Online (Sandbox Code Playgroud)

我认为 TS 实际上并没有关注 tsBuildInfo 文件的路径,因为如果我将选项设置tsBuildInfoFile为像“@@@@@@”这样的废话,那没有什么区别。

Dav*_*ret 5

tsBuildInfoFile使用常规程序时将被忽略。您需要使用该ts.createIncrementalProgram函数创建一个程序。

例如:

import * as ts from "typescript";

const program = ts.createIncrementalProgram({
    rootNames: ["./src/foo.ts"],
    options: {
        incremental: true,
        tsBuildInfoFile: "./tsbuildinfo"
    }
});
const emit = program.emit();
console.log('emitted', JSON.stringify(emit));
Run Code Online (Sandbox Code Playgroud)

另外,如果您正在创建主机,则似乎您可能需要使用该ts.createIncrementalCompilerHost函数来创建它。

  • @MaxHeiber 它仅在 3.6 RC 中可用。我从 3.6 RC [博客文章](https://devblogs.microsoft.com/typescript/announcing-typescript-3-6-rc/) 中发现并查看 [tsc.ts](https://devblogs.microsoft.com/typescript/announcing-typescript-3-6-rc/) 的来源/github.com/microsoft/TypeScript/blob/master/src/tsc/tsc.ts)。 (2认同)
  • @MaxHeiber 我不认为这是一个错误。似乎使用哪个程序的决定是根据编译器选项在高层做出的。有时人们可能会从编译器选项创建程序而不希望使用构建信息文件,因此如果他们必须在使用之前删除这些编译器选项会很不方便。 (2认同)