Typescript: توقف المترجم عند استيراد ملف JS كبير باستخدام --allowJs

تم إنشاؤها على ٨ يوليو ٢٠١٧  ·  3تعليقات  ·  مصدر: microsoft/TypeScript

إصدار TypeScript: 2.4.1

مشروع Repro
عند استيراد ملف JS كبير (محلل عمل) (تنسيق 245 كيلو بايت) (مع تمكين --allowJs ) يتوقف المترجم إلى الأبد. الحد الأدنى من مشروع repro المقدم: tsc-hang-00

سلوك متوقع:
التجميعات تنتهي بأخطاء أو بدونها.

السلوك الفعلي:
التجميعات معلقة إلى الأبد وتحافظ على استهلاك وحدة المعالجة المركزية.

شروط الاختبارات

  • Windows 10 ، NodeJS 8.0 ، TS 2.4.1
  • ترافيس: Linux Container، NodeJS 8.0، TS 2.4.1
Bug

التعليق الأكثر فائدة

Heya ، أردت فقط أن أقول إن لديّ نسخة أخرى أبسط في https://github.com/filipesilva/tsc-allowjs-big-file. تم استلهامها من reprodzonatan على https://github.com/angular/angular-cli/issues/9636#issuecomment -390203543.

إنه يحتوي فقط على فصل دراسي بألف طريقة:

export class BigClass {
  myVar: any;

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

سيؤدي تشغيل npm test على هذا المستودع إلى تجميع ملف الكتابة هذا إلى جافا سكريبت ، ثم تجميع ملف جافا سكريبت الناتج باستخدام --allowJs .

ينتج عن هذا الخطأ RangeError: Maximum call stack size exceeded مع TS 2.7.2 و 2.8.4. ومع ذلك ، في TS 2.9.1 ، لا يقع أي خطأ وينجح التجميع.

ال 3 كومينتر

حاولت تحديد ما يحدث هنا ومحاولة التقاط ملف تعريف وحدة المعالجة المركزية لأي فترة زمنية (حتى 1 ثانية) سيؤدي إلى تعطل ملف تعريف Chrome أثناء معالجة ملف تعريف وحدة المعالجة المركزية.

ربما لا يكون التنميط مفيدًا لملف بحجم 245 كيلو - فهو عادةً خطأ أو مشكلة أداء خوارزمية ، وكلاهما يعبر عن نفسه عادةً على أنه مكدسات عميقة جدًا. طريقة التصحيح الأولية الخاصة بي هي بدء التصحيح والإيقاف المؤقت عدة مرات. سأعود إلى التنميط (أو تصحيح أخطاء printf للذاكرة المؤقتة) إذا لم يكن هناك نمط في المواقع.

هناك معنيان مرتبطان بـ "الموقع": العقدة التي يتم فحصها حاليًا ، وحيث يكون مؤشر التعليمات عند إيقاف التصحيح مؤقتًا.

Heya ، أردت فقط أن أقول إن لديّ نسخة أخرى أبسط في https://github.com/filipesilva/tsc-allowjs-big-file. تم استلهامها من reprodzonatan على https://github.com/angular/angular-cli/issues/9636#issuecomment -390203543.

إنه يحتوي فقط على فصل دراسي بألف طريقة:

export class BigClass {
  myVar: any;

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

سيؤدي تشغيل npm test على هذا المستودع إلى تجميع ملف الكتابة هذا إلى جافا سكريبت ، ثم تجميع ملف جافا سكريبت الناتج باستخدام --allowJs .

ينتج عن هذا الخطأ RangeError: Maximum call stack size exceeded مع TS 2.7.2 و 2.8.4. ومع ذلك ، في TS 2.9.1 ، لا يقع أي خطأ وينجح التجميع.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات