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

javascript - วิธีนำเข้าไลบรารี/โมดูล/ที่ไม่ใช่คอมโพเนนต์แบบไดนามิกใน next.js


ฉันได้ใช้งาน Next.js และรู้วิธีใช้การ import แบบไดนามิกของมันสำหรับการนำเข้าคอมโพเนนต์ (ทั้งแบบมีชื่อและแบบ export) แต่เมื่อเร็วๆ นี้ฉันเจอแพ็กเกจ npm บางตัวที่ทำงานบนเบราว์เซอร์เท่านั้น (ฝั่งไคลเอนต์ ต้องใช้ window) และมีขนาดค่อนข้างใหญ่ (100kb)

ฉันมีปัญหาในการนำเข้าพวกมันแบบไดนามิกภายในแอปของฉัน

นี่คือสิ่งที่ฉันได้รับเป็นข้อผิดพลาดขณะนำเข้าชุดแพ็กเกจดังกล่าว (ซึ่งเป็นแพ็กเกจที่ไม่ใช่คอมโพเนนต์)

import dynamic from 'next/dynamic';
const packageDynamic = dynamic(() => import('npm-package'), {
  ssr: false,
});

... Errors:
Types of property 'default' are incompatible.
Type [package] is not assignable to type 'ComponentType<{}>'.

มีใครทำสิ่งนี้มาก่อนหรือไม่?

คำตอบ #1

ตามเอกสารของ Next.js:

Next.js รองรับการโหลดแบบเลทของ ไลบรารีภายนอกด้วย import() และคอมโพเนนต์ React ด้วย next/dynamic

dynamic ถูกสงวนไว้สำหรับคอมโพเนนต์ของ React

คุณสามารถใช้คำสั่ง import แทนเพื่อทำการ import โค้ด "ที่ไม่ใช่คอมโพเนนต์" ของคุณแบบไดนามิก:

const packageDynamic = (await import('npm-package')).default;