Versión de TypeScript: 2.4.1
Proyecto Repro
Al importar un archivo JS grande (un analizador que funciona) (formato commonjs de 245 Kbytes) (con --allowJs
habilitado), el compilador se bloquea para siempre. Proyecto de reproducción mínima proporcionado: tsc-hang-00
Comportamiento esperado:
Las compilaciones terminan con o sin errores.
Comportamiento real:
Las compilaciones se cuelgan para siempre y siguen consumiendo CPU.
Condiciones de las pruebas
Intenté perfilar lo que está sucediendo aquí e intentar capturar un perfil de CPU durante cualquier período de tiempo (incluso 1 s) hará que el generador de perfiles de Chrome se bloquee mientras procesa el perfil de la CPU.
La creación de perfiles probablemente no sea útil para un archivo de 245k; generalmente es un error o un problema de rendimiento algorítmico, los cuales generalmente se expresan como pilas muy profundas. Mi método de depuración inicial es comenzar a depurar y hacer una pausa unas cuantas veces. Volveré a la creación de perfiles (o la depuración de cachés mediante printf) si no parece haber un patrón en las ubicaciones.
Hay dos significados relevantes de 'ubicación': qué nodo se está comprobando actualmente y dónde está el puntero de instrucción cuando se pausa la depuración.
Oye, solo quería decir que tengo otra reproducción más simple en https://github.com/filipesilva/tsc-allowjs-big-file. Se inspiró en la reproducción de https://github.com/angular/angular-cli/issues/9636#issuecomment -390203543.
Solo tiene una clase con mil métodos:
export class BigClass {
myVar: any;
method000() { return this.myVar; }
method001() { return this.myVar; }
// ...
method999() { return this.myVar; }
}
Ejecutar npm test
en ese repositorio compilará este archivo mecanografiado en javascript, y luego compilará el archivo javascript resultante con --allowJs
.
Esto produce el error RangeError: Maximum call stack size exceeded
con TS 2.7.2 y 2.8.4. Sin embargo, con TS 2.9.1, no se produce ningún error y la compilación se realiza correctamente.
Comentario más útil
Oye, solo quería decir que tengo otra reproducción más simple en https://github.com/filipesilva/tsc-allowjs-big-file. Se inspiró en la reproducción de https://github.com/angular/angular-cli/issues/9636#issuecomment -390203543.
Solo tiene una clase con mil métodos:
Ejecutar
npm test
en ese repositorio compilará este archivo mecanografiado en javascript, y luego compilará el archivo javascript resultante con--allowJs
.Esto produce el error
RangeError: Maximum call stack size exceeded
con TS 2.7.2 y 2.8.4. Sin embargo, con TS 2.9.1, no se produce ningún error y la compilación se realiza correctamente.