尝试在 Next.js 中创建 xterm React 组件时,我陷入了困境,因为我无法克服以前从未收到过的错误消息。
我正在尝试导入一个名为 xterm
的 npm 客户端模块,但如果我添加导入行,应用程序就会崩溃。
import { Terminal } from 'xterm'
错误读取 服务器错误... ReferenceError: self is not Defined
然后将这段代码显示为 Source
module.exports = require("xterm");
根据我所做的一些研究,这与 Webpack 有关,如果完成这样的事情可能会有所帮助:
output: { globalObject: 'this' }
你知道如何解决这个问题吗?
出现此错误的原因是该库需要 Web API 才能工作,而当 Next.js 在服务器端预渲染页面。
在您的情况下,
xterm
尝试访问服务器上不存在的window
对象。解决方案是避免在服务器上加载xterm
并动态导入它,以便仅在客户端加载它。在 Next.js 中,有多种方法可以实现此目的。
#1 在
useEffect
内使用动态import()
将
import
移至组件的useEffect
,然后动态导入库并在其中添加逻辑。#2 将
next/dynamic
与ssr: false
一起使用创建一个组件,在其中添加
xterm
逻辑。然后在使用时动态导入该组件。
作为替代方案,您可以在使用
next/dynamic
动态导入库时直接添加逻辑,以避免产生额外的文件。