방명록
- [Next.js] "ReferenceError: window is not defined" 이슈, dynamic import로 해결2023년 10월 23일 17시 42분 05초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
1. 왜 터미널에서만 ReferenceError 에러를 뿜는 거지?
Next.js 프로젝트에 mind-ar 라이브러리를 설치한 후 import 하였다. 컴포넌트에서 mindar-image-three라는 모듈을 import 해야 하는데 인식하지 못했다. 그래서 아래와 같이 해당 모듈의 경로까지 작성하였다.
import { MindARThree } from "mind-ar/dist/mindar-image-three.prod";
여기까지는 그럭저럭 잘 넘겼다. 그런데-서버 사이드-터미널에서 "ReferenceError: window is not defined" 에러가 발생했다. 브라우저에서는 아무런 문제없이 화면이 렌더링 되었고 콘솔도 고요했다. 오직 터미널에서만 난리가 났다!
2. 동적 로딩(dynamic import)으로 고요하게!
이 오류는 클라이언트 측에서만 유효한 window 객체에 접근하려고 할 때 발생하는데, Next.js의 동적 로딩(dynamic import)으로 해결할 수 있다.
// ARComponent.jsx (클라이언트 컴포넌트) "use client"; // (생략) import { MindARThree } from "mind-ar/dist/mindar-image-three.prod"; // (생략)
위와 같은 자식 컴포넌트가 있다면, 부모 컴포넌트에서 위 컴포넌트를 로딩할 때 다음과 같이 처리하면 된다.
import dynamic from "next/dynamic"; const NoSsrARComponent = dynamic(() => import("./ARComponent"), { ssr: false, // 클라이언트 측에서만 실행 }); // (생략) return <NoSsrARComponent />
728x90반응형'언어·프레임워크 > Next.js' 카테고리의 다른 글
[Next.js] AR 물고기 두마리가 겹쳐 보이는 현상?! useEffect 2번 호출 문제! (1) 2023.10.25 [Next.js] 서버 컴포넌트와 클라이언트 컴포넌트의 경로는 다르다! (0) 2023.10.24 [Next.js] 인프런 "[손에 익는 Next.js] 공식 문서 훑어보기" 학습 내용 정리 (1) 2023.10.23 [Next.js] JavaScript와는 다른 Next.js에서의 Web Worker 사용법 (0) 2023.10.20 [Next.js] WEB TECH SEMINAR 강의 요약 : Pages Router, App Router, API Routes, Route Handlers, Server Actions 등 (1) 2023.10.15 다음글이 없습니다.이전글이 없습니다.댓글