【问题标题】:How can I use --incremental from TypeScript compiler API?如何使用 TypeScript 编译器 API 中的 --incremental?
【发布时间】:2019-12-24 12:45:52
【问题描述】:

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: []}

我认为 TS 实际上并没有关注 tsBuildInfo 文件的路径,因为如果我将 tsBuildInfoFile 选项设置为诸如“@@@@@@”之类的废话,则没有区别。

【问题讨论】:

    标签: typescript typescript-compiler-api


    【解决方案1】:

    使用常规程序时,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));
    

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

    【讨论】:

    • 谢谢!你是怎么发现的?另外,这是一个错误吗?我希望 createProgram(['./foo.ts'], { incremental: true, tsBuildInfoFile: '.tsb'}) 不会进行类型检查并抛出运行时错误,而不是默默地做错事。跨度>
    • 我在 typescript@latest(版本 3.5.3)上没有看到 ts.createIncrementalProgram
    • @MaxHeiber 它仅在 3.6 RC 中可用。我从 3.6 RC 中找到了blog post 并查看了tsc.ts 的来源。
    • @MaxHeiber 我不认为这是一个错误。似乎根据编译器选项在较高级别上决定使用哪个程序。有时人们可能会从编译器选项创建一个程序,而不想使用构建信息文件,因此如果他们必须在使用它之前去掉这些编译器选项会很不方便。
    • @CraigHicks 这就是编译器实现--watch 功能的方式。这与incremental compiler option相关性更大。
    猜你喜欢
    • 2019-09-18
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多