Saya buntu semasa cuba mencipta komponen xterm React dalam Next.js kerana saya tidak dapat mengatasi mesej ralat yang tidak pernah saya terima sebelum ini.
Saya cuba mengimport modul klien npm yang dipanggil xterm
tetapi jika saya menambah baris import, apl akan ranap.
import { Terminal } from 'xterm'
Ralat membaca 服务器错误... ReferenceError: self is not Defined
Kemudian paparkan kod ini sebagai Source
module.exports = require("xterm");
Dari beberapa penyelidikan yang saya lakukan, ini berkaitan dengan Webpack dan mungkin berguna jika perkara seperti ini dilakukan:
output: { globalObject: 'this' }
Adakah anda tahu bagaimana untuk menyelesaikan masalah ini?
Sebab ralat ini berlaku ialah perpustakaan memerlukan API Web untuk berfungsi dan apabila Next.js pra-memaparkan halaman di sebelah pelayan.
Dalam kes anda,
xterm
尝试访问服务器上不存在的window
对象。解决方案是避免在服务器上加载xterm
dan importnya secara dinamik supaya ia hanya dimuatkan pada bahagian pelanggan.Dalam Next.js, terdapat pelbagai cara untuk mencapai perkara ini.
#1 dalam
useEffect
内使用动态import()
Ganti
import
移至组件的useEffect
dan kemudian import perpustakaan secara dinamik dan tambah logik di dalamnya.#2 Gunakan
next/dynamic
与ssr: false
bersamaBuat komponen dan tambah
xterm
logik padanya.Kemudian import komponen secara dinamik apabila digunakan.
Sebagai alternatif, anda boleh menambah logik secara langsung apabila menggunakan
next/dynamic
perpustakaan import dinamik untuk mengelak daripada menjana fail tambahan.