ค้นหาเว็บไซต์

จาวาสคริปต์ - ไลบรารี 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",
        ...
       },
       ...
    }

บทความที่เกี่ยวข้อง