Versão TypeScript: 2.4.1
Projeto Repro
Ao importar um grande arquivo JS (um analisador funcional) (formato commonjs de 245 Kbytes) (com --allowJs
habilitado) o compilador trava para sempre. Projeto de reprodução mínimo fornecido: tsc-hang-00
Comportamento esperado:
As compilações terminam com ou sem erros.
Comportamento real:
As compilações ficam suspensas para sempre e continuam consumindo CPU.
Condições de teste
Tentei traçar o perfil do que está acontecendo aqui e tentar capturar um perfil de CPU por qualquer período de tempo (mesmo 1s) fará com que o criador de perfil do Chrome trave durante o processamento do perfil de CPU.
A criação de perfil provavelmente não é útil para um arquivo de 245k - geralmente é um bug ou um problema de desempenho de algoritmo, que geralmente se expressam como pilhas muito profundas. Meu método de depuração inicial é começar a depurar e apenas pausar algumas vezes. Vou recorrer à criação de perfil (ou depuração de caches de printf) se não parecer haver um padrão nos locais.
Existem dois significados relevantes de 'localização': qual nó está sendo verificado no momento e onde o ponteiro da instrução está quando a depuração é pausada.
Ei, só queria dizer que tenho outra reprodução mais simples em https://github.com/filipesilva/tsc-allowjs-big-file. Foi inspirado pela reprodução de https://github.com/angular/angular-cli/issues/9636#issuecomment -390203543.
Tem apenas uma classe com mil métodos:
export class BigClass {
myVar: any;
method000() { return this.myVar; }
method001() { return this.myVar; }
// ...
method999() { return this.myVar; }
}
Executar npm test
nesse repositório irá compilar este arquivo typescript para javascript e, em seguida, compilar o arquivo javascript resultante com --allowJs
.
Isso resulta no erro RangeError: Maximum call stack size exceeded
com TS 2.7.2 e 2.8.4. No entanto, com o TS 2.9.1, nenhum erro é gerado e a compilação é bem-sucedida.
Comentários muito úteis
Ei, só queria dizer que tenho outra reprodução mais simples em https://github.com/filipesilva/tsc-allowjs-big-file. Foi inspirado pela reprodução de https://github.com/angular/angular-cli/issues/9636#issuecomment -390203543.
Tem apenas uma classe com mil métodos:
Executar
npm test
nesse repositório irá compilar este arquivo typescript para javascript e, em seguida, compilar o arquivo javascript resultante com--allowJs
.Isso resulta no erro
RangeError: Maximum call stack size exceeded
com TS 2.7.2 e 2.8.4. No entanto, com o TS 2.9.1, nenhum erro é gerado e a compilação é bem-sucedida.