我正在努力改进部署在Vercel上的Next.js站点。
我已经意识到,当我部署页面时,我首先会得到以下错误:
GET] /
17:53:00:19
2022-09-12T14:53:00.262Z 938c1a2e-ce7c-4f31-8ad6-2177814cb023 ERROR Uncaught Exception {"errorType":"ReferenceError","errorMessage":"window is not defined","stack":["ReferenceError: window is not defined"," at Timeout._onTimeout (/var/task/.next/server/pages/index.js:291:26)"," at listOnTimeout (internal/timers.js:557:17)"," at processTimers (internal/timers.js:500:7)"]}
[ERROR] [1662994380263] LAMBDA_RUNTIME Failed to post handler success response. Http response code: 400.
RequestId: 2f3b61aa-5dc8-4c12-a71c-6cc652a75ccc Error: Runtime exited with error: exit status 129
Runtime.ExitError
然后,如果我在浏览器上刷新,它会完美加载。然后,如果我再次刷新,我会再次得到相同的错误,然后如果我刷新,它会加载,以此类推
这种模式永远重复。
它可能与window
和服务器端渲染有关(window
不存在(,但我很难理解为什么它会导致网页访问之间的成功/错误模式交替。
我的实际代码是TypeScript,index.tsx
文件上没有291行。然而,我确实在.next/static/chunks/pages
和.next/server/pages
文件夹中传输了它们的JS版本,尽管其中一个文件夹的第291行有"use strict"
,另一个有注释,所以我找不到任何关于堆栈跟踪行号的有用信息。
附言:我是Next.js的新手,这是我接手的一个项目。如果我做错了什么,我很乐意得到详细的解释。
我已经通过将对window
的每次调用封装在if(typeof window !== 'undefined')
语句中来解决这个问题,尽管我仍然对交替的错误模式感到好奇,所以我仍然保留这个问题:
为什么它每2次出错一次,而不是总是或从不出错?