next.js 生成期间未定义窗口

nxowjjhe  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(99)

我正在使用Next JS和传单制作一个IP地址跟踪器。每次我尝试在Vercel中部署我的项目时,它都会显示一个错误,内容是:

Build error occurred
ReferenceError: window is not defined
at /vercel/path0/node_modules/leaflet/dist/leaflet-src.js:227:19

我已经动态导入了我的组件,但它仍然显示相同的错误。

import dynamic from "next/dynamic";
const MapsNoSSR = dynamic(() => import("./MapsNoSSR.js"), { ssr: false });

这是我的MapsNoSSR.js文件:

import { MapContainer, TileLayer, Marker, Popup } from "react-leaflet";
import "leaflet/dist/leaflet.css";
import "leaflet-defaulticon-compatibility/dist/leaflet-defaulticon- 
compatibility.css";
import "leaflet-defaulticon-compatibility";
import React, { useEffect, useState } from "react";
import { ChangeView } from "./ChangeView.js";

const Maps = ({ results }) => {

return (
<MapContainer
  center={[geoData.lat, geoData.lng]}
  zoom={12}
  doubleClickZoom={true}
  scrollWheelZoom={true}
  dragging={true}
  animate={true}
  scrollWheelZoom={false}
  style={{
    height: "900px",
    width: "100%",
    position: "absolute",
    zIndex: "1",
   }}
 >
   {geoData.lat && geoData.lng && (
    <ChangeView coords={[geoData.lat, geoData.lng]} zoom={15} />
  )}

  <TileLayer
    url={`https://api.mapbox.com/styles/v1/mapbox/streets- 
   v11/tiles/256/{z}/{x}/{y}@2x?access_token=`}
  />
  {geoData.lat && geoData.lng && (
    <Marker position={[geoData.lat, geoData.lng]}>
      <Popup position={[geoData.lat, geoData.lng]}>
        Current Position: {geoData.lat}, {geoData.lng}
      </Popup>
    </Marker>
  )}
</MapContainer>
 );
 };
pdsfdshx

pdsfdshx1#

我在使用Nextjs和传单时看到了相同的“窗口未定义”错误。看来您正确地处理了动态组件,这是解决此问题的第一步。
但从外观上看,您犯了与我相同的错误,即将Map组件存储在pages目录中。Nextjs likes to pre-compile the pages directory,这就是为什么你会看到这个错误。
若要解决此问题,请将MapsNoSSR组件从Pages目录中移出,并移到一个单独的目录中,例如新的Components目录。

相关问题