Je suis bloqué en essayant de créer un composant xterm React dansNext.jsparce que je n'arrive pas à me remettre d'un message d'erreur que je n'ai jamais reçu auparavant.
J'essaie d'importer un module client npm appeléxterm
mais si j'ajoute la ligne d'importation, l'application plante.
import { Terminal } from 'xterm'
Erreur de lecture服务器错误... ReferenceError: self is not Defined
Affichez ensuite ce code commeSource
module.exports = require("xterm");
D'après certaines recherches que j'ai effectuées, cela est lié à Webpack et cela pourrait être utile si quelque chose comme ceci était fait :
output: { globalObject: 'this' }
Savez-vous comment résoudre ce problème ?
La raison pour laquelle cette erreur se produit est que la bibliothèque nécessite l'API Web pour fonctionner et lorsqueNext.js pré-rend la page côté serveur.
Dans votre cas,
xterm
尝试访问服务器上不存在的window
对象。解决方案是避免在服务器上加载xterm
et importez-le dynamiquement pour qu'il ne soit chargé que côté client.Dans Next.js, il existe plusieurs façons d'y parvenir.
#1 sur
useEffect
内使用动态import()
Remplacez
import
移至组件的useEffect
puis importez dynamiquement la bibliothèque et ajoutez-y une logique.#2 Utilisez
next/dynamic
与ssr: false
ensembleCréez un composant et ajoutez-y une logique
xterm
.Ensuite, importez dynamiquement le composant lorsqu'il est utilisé.
Commealternative, vous pouvez ajouter une logique directement lorsque vous utilisez des
next/dynamic
bibliothèques d'importation dynamique pour éviter de générer des fichiers supplémentaires.