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