Typescript: 使用--allowJs导入大JS文件时,编译器挂起

创建于 2017-07-08  ·  3评论  ·  资料来源: microsoft/TypeScript

TypeScript版本: 2.4.1

复制项目
导入大JS文件(有效的解析器)(245 KB commonjs格式)(启用--allowJs )时,编译器将永远挂起。 提供的最小再生项目: tsc-hang-00

预期行为:
编译以有无错误结束。

实际行为:
编译将永远挂起,并持续消耗CPU。

测试条件

  • Windows 10,NodeJS 8.0,TS 2.4.1
  • 特拉维斯:Linux容器,NodeJS 8.0,TS 2.4.1

最有用的评论

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,不会引发任何错误,并且编译成功。

所有3条评论

我尝试分析此处发生的情况,并尝试捕获任意时间长度(甚至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,不会引发任何错误,并且编译成功。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

CyrusNajmabadi picture CyrusNajmabadi  ·  3评论

jbondc picture jbondc  ·  3评论

uber5001 picture uber5001  ·  3评论

wmaurer picture wmaurer  ·  3评论

Roam-Cooper picture Roam-Cooper  ·  3评论