usebasejump/basejump

"ReferenceError: window is not defined" error while depoling to vercel.

slonikmak opened this issue · 2 comments

When I deploy to vercel I get an error "ReferenceError: window is not defined".

next-translate - compiled page: /blog/[...slug] - locale: en - namespaces: content - used loader: getStaticProps
--
23:00:14.541 | next-translate - compiled page: /docs/[...slug] - locale: en - namespaces: content - used loader: getStaticProps
23:00:14.553 | ReferenceError: window is not defined
23:00:14.553 | at getFullRedirectUrl (/vercel/path0/.next/server/chunks/392.js:78:40)
23:00:14.554 | at ContentMeta (/vercel/path0/.next/server/chunks/392.js:54:115)
23:00:14.554 | at Wc (/vercel/path0/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:68:44)
23:00:14.554 | at Zc (/vercel/path0/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:253)
23:00:14.555 | at Z (/vercel/path0/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89)
23:00:14.555 | at $c (/vercel/path0/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:78:98)
23:00:14.562 | at bd (/vercel/path0/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:77:404)
23:00:14.562 | at Z (/vercel/path0/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:217)
23:00:14.562 | at $c (/vercel/path0/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:78:98)
23:00:14.562 | at Zc (/vercel/path0/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:71:145)

It works fine on the my local machine.

This seems to be because of some changes to Vercel's env vars, where they no longer populate a URL one. You can update get-full-redirect-url.ts to use the following as a fix, just confirmed it works for me:

export default function getFullRedirectUrl(redirectPath: string) {
  if (redirectPath.startsWith("http")) return redirectPath;
  const baseUrl =
    process.env.URL || process.env.VERCEL_URL || window.location.origin;
  return [baseUrl, redirectPath?.replace(/^\//, "")].filter(Boolean).join("/");
}

I'll get a PR going for the template.

This has bee resolved in the legacy repo - I'll be working on a simpler starter kit for Next shortly