Typescript: Kompilator macet saat mengimpor file JS besar dengan --allowJs

Dibuat pada 8 Jul 2017  ·  3Komentar  ·  Sumber: microsoft/TypeScript

TypeScript Version: 2.4.1

Proyek repro
Saat mengimpor file JS besar (pengurai yang berfungsi) (format commonjs 245 Kbytes) (dengan --allowJs diaktifkan) kompilator hang selamanya. Proyek repro minimal yang disediakan: tsc-hang-00

Perilaku yang diharapkan:
Kompilasi diakhiri dengan atau tanpa kesalahan.

Perilaku sebenarnya:
Kompilasi hang selamanya dan terus menggunakan CPU.

Menguji kondisi

  • Windows 10, NodeJS 8.0, TS 2.4.1
  • Travis: Linux Container, NodeJS 8.0, TS 2.4.1
Bug

Komentar yang paling membantu

Heya, hanya ingin mengatakan saya punya repro lain yang lebih sederhana di https://github.com/filipesilva/tsc-allowjs-big-file. Ini terinspirasi oleh @dzonatan 's repro di https://github.com/angular/angular-cli/issues/9636#issuecomment -390.203.543.

Itu hanya memiliki kelas dengan seribu metode:

export class BigClass {
  myVar: any;

  method000() { return this.myVar; }
  method001() { return this.myVar; }
  // ...
  method999() { return this.myVar; }
}

Menjalankan npm test pada repositori itu akan mengkompilasi file skrip ketikan ini ke javascript, dan kemudian mengkompilasi file javascript yang dihasilkan dengan --allowJs .

Ini menghasilkan kesalahan RangeError: Maximum call stack size exceeded dengan TS 2.7.2 dan 2.8.4. Namun, dengan TS 2.9.1, tidak ada kesalahan yang terjadi dan kompilasi berhasil.

Semua 3 komentar

Saya mencoba membuat profil apa yang terjadi di sini dan mencoba menangkap profil CPU untuk waktu yang lama (bahkan 1 detik) akan menyebabkan profiler Chrome macet saat memproses profil CPU.

Pembuatan profil mungkin tidak berguna untuk file 245k - biasanya merupakan bug atau masalah kinerja algoritmik, yang keduanya biasanya mengekspresikan dirinya sebagai tumpukan yang sangat dalam. Metode debugging awal saya adalah memulai debugging dan hanya berhenti beberapa kali. Saya akan kembali ke pembuatan profil (atau printf debugging cache) jika tampaknya tidak ada pola di lokasi.

Ada dua arti yang relevan dari 'lokasi': node mana yang saat ini sedang diperiksa, dan di mana penunjuk instruksi berada saat debugging dihentikan sementara.

Heya, hanya ingin mengatakan saya punya repro lain yang lebih sederhana di https://github.com/filipesilva/tsc-allowjs-big-file. Ini terinspirasi oleh @dzonatan 's repro di https://github.com/angular/angular-cli/issues/9636#issuecomment -390.203.543.

Itu hanya memiliki kelas dengan seribu metode:

export class BigClass {
  myVar: any;

  method000() { return this.myVar; }
  method001() { return this.myVar; }
  // ...
  method999() { return this.myVar; }
}

Menjalankan npm test pada repositori itu akan mengkompilasi file skrip ketikan ini ke javascript, dan kemudian mengkompilasi file javascript yang dihasilkan dengan --allowJs .

Ini menghasilkan kesalahan RangeError: Maximum call stack size exceeded dengan TS 2.7.2 dan 2.8.4. Namun, dengan TS 2.9.1, tidak ada kesalahan yang terjadi dan kompilasi berhasil.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat