TypeScript版本: 2.4.1
复制项目
导入大JS文件(有效的解析器)(245 KB commonjs格式)(启用--allowJs
)时,编译器将永远挂起。 提供的最小再生项目: tsc-hang-00
预期行为:
编译以有无错误结束。
实际行为:
编译将永远挂起,并持续消耗CPU。
测试条件
我尝试分析此处发生的情况,并尝试捕获任意时间长度(甚至1秒)的CPU配置文件,都会导致Chrome分析器在处理CPU配置文件时崩溃。
概要分析对于245k文件可能没有用,它通常是bug或算法性能问题,两者通常都将自己表示为非常深的堆栈。 我最初的调试方法是开始调试,然后暂停几次。 如果位置中似乎没有模式,我将回过头来进行概要分析(或对缓存进行printf调试)。
“位置”有两个相关含义:当前正在检查哪个节点,以及调试暂停时指令指针在何处。
Heya,只是想说我在https://github.com/filipesilva/tsc-allowjs-big-file有另一个更简单的复制@dzonatan的repro ,网址为
它只有一个具有一千种方法的类:
export class BigClass {
myVar: any;
method000() { return this.myVar; }
method001() { return this.myVar; }
// ...
method999() { return this.myVar; }
}
在该存储库上运行npm test
会将此打字稿文件编译为javascript,然后使用--allowJs
编译生成的javascript文件。
这将产生TS 2.7.2和2.8.4的RangeError: Maximum call stack size exceeded
错误。 但是,对于TS 2.9.1,不会引发任何错误,并且编译成功。
最有用的评论
Heya,只是想说我在https://github.com/filipesilva/tsc-allowjs-big-file有另一个更简单的复制@dzonatan的repro ,网址为
它只有一个具有一千种方法的类:
在该存储库上运行
npm test
会将此打字稿文件编译为javascript,然后使用--allowJs
编译生成的javascript文件。这将产生TS 2.7.2和2.8.4的
RangeError: Maximum call stack size exceeded
错误。 但是,对于TS 2.9.1,不会引发任何错误,并且编译成功。