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