جافاسكريبت - مكتبات Angular 10 وتوافق IVY/ngcc


لدي مكتبة تحتاج إلى التوزيع عبر npm. لا يزال التوصية بالنسبة لـ Angular 10 تبدو أنها أن مثل هذه المكتبات يجب أن تُجمع مع تعطيل IVY، لكن Angular CLI ستضمن أن المكتبة لا تزال متوافقة مع تطبيق تم تمكين IVY فيه.

مع مكتبتي، إذا بنيتها باستخدام IVY فإنها تعمل كما هو متوقع. ومع ذلك، إذا قمت بتعطيل IVY عند البناء، عند محاولة استيراد المكتبة أحصل على الخطأ التالي:

خطأ في node_modules/@me/my-module/lib/my-module.module.d.ts:1:22 - خطأ NG6002: يظهر في NgModule.imports الخاص بـ AppModule، ولكن لم يتمكن من التحقق منه كصف NgModule.

هذا يعني على الأرجح أن المكتبة (@me/my-module) التي تعلن عن MeMYModule لم تتم معالجتها بشكل صحيح بواسطة ngcc، أو أنها غير متوافقة مع Angular Ivy. تحقق مما إذا كانت هناك نسخة أحدث من المكتبة متاحة، وقم بالتحديث إذا كان الأمر كذلك. كما يُنصح بالتحقق مع مؤلفي المكتبة لمعرفة ما إذا كان من المتوقع أن تكون المكتبة متوافقة مع Ivy.

هل أنا أفتقد شيئًا؟ لقد وجدت الكثير من المشاكل المماثلة، لكن لا يبدو أن أيًا من الحلول تعمل.

الإجابة رقم 1

واجهت مشكلة مشابهة قبل بضعة أيام. حليتها بإضافة السكريبت التالي داخل ملف package.json الخاص بي.

"scripts": {
    "postinstall": "ngcc"
  }

الإجابة رقم 2

لقد واجهت مشكلة مشابهة قبل بضعة أيام، عند دمج Flutterwave في مشروع Angular 16، ظهر هذا الخطأ

flutterwave.module.d.ts(1, 22): هذا على الأرجح يعني أن المكتبة (flutterwave-angular-v3) التي تعلن عن FlutterwaveModule غير متوافقة مع Angular Ivy. تحقق مما إذا كان هناك إصدار أحدث من المكتبة متاح، وقم بالتحديث إذا كان كذلك. كما يُنصح بالتحقق مع مؤلفي المكتبة لمعرفة ما إذا كانت المكتبة من المفترض أن تكون متوافقة مع Ivy.

حللتها عن طريق إضافة النص البرمجي التالي داخل ملف package.json الخاص بي.

    {
      ...
      "scripts": {
        ...
        "postinstall": "npx --package @angular/[email  --yes ngcc",
        ...
       },
       ...
    }