【发布时间】:2020-04-18 10:03:26
【问题描述】:
在使用编译器 API 时,是否可以在给定一组 CompilerOptions 的情况下获取 SourceFile 的输出位置?
我可以模仿 TypeScript 使用 outDir、rootDir 和包含的文件路径集解析此路径的方式,但这似乎不是一个好主意(原因很明显)。
我注意到 ts.getOutputFileNames 和 ts.getTsBuildInfoEmitOutputFilePath 函数看起来很有希望,但第一个函数需要一个 ts.ParsedCommandLine(这对于编程使用没有意义),而第二个函数似乎返回 undefined 无论如何我输入的CompilerOptions。
编辑:
我检查了编译器的代码,看起来像it's using getOwnEmitOutputFilePath 在“常规编译”期间计算此路径。不幸的是,this function 被标记为内部,这意味着它不容易被 API 使用访问。
即使这个函数被访问(例如通过手动增加它的类型),它也需要一个EmitHost,它也被标记为内部。
奇怪的是,TransformationContext 接口确实有一个(内部)getEmitHost 函数,但在我的测试过程中它总是返回undefined,可能是因为我使用的是编程的transform 函数而不是完整的编译。
换句话说:我必须手动构造一个EmitHost。
看起来这是在编译器的两个地方完成的,inside createProgram 和 in the emitter itself。遗憾的是,在这两种情况下,这个“构造函数”都无法以编程方式使用。
由于使用了内部 API,手动实现 EmitHost 似乎也不是一个可行的解决方案。
我觉得在这一点上我别无选择。是否有任何其他(公共)方式可以访问此信息,或者这是否应该被视为功能请求?
【问题讨论】:
标签: typescript typescript-compiler-api