개인 프로젝트를 배포하는 과정에서 발생한 오류로 인해 Pre-rendering의 개념을 다시 짚어보았다.
📌 바로 Pre-rendering errorError occurred prerendering page
Pre-rendering은 Next.js의 아주 중요한 개념 중 하나이다. Pre-rendering은 Next.js가 JS로 만들어진 페이지를 보여주기 전 미리 각 페이지의 HTML 파일을 미리 만들어서 보여주는 것을 의미한다. 반면, 순수 리액트를 사용했을 때는 Pre-rendering 기능을 제공하지 않기 때문에 사용자는 JS 파일로 된 파일을 다 불러올 때까지 빈 화면을 보게 되는 불편함이 있다. (Client-Side Rendering)
에러 머시지 #1
Error occurred prerendering page "/view/[mediaType]/[type]". Read more: https://nextjs.org/docs/messages/prerender-error
첫번째 에러 메시지는 Pre-rendering을 하는 과정에서 발생한 에러에 대한 해결 방법을 제시해 준다. 하지만 하단의 방법대로 해봤지만 해결하지 못했다.
해당링크로 이동하기
에러 머시지 #2
Error: Error for page /view/[mediaType]/[type]: pages with `getServerSideProps` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export
두번째 에러 메시지는 getServersideProps를 Build 하는 과정에서 export에 실패했다고 뜬다. 해당 공식문서에 가보니 package.json
파일에 build 명령어를 update하라고 한다.
기존 코드
{
"scripts": {
"dev": "next dev",
"build": "next build && next export",
"build:dev": "env-cmd -f .env.dev next build",
"build:local": "env-cmd -f .env.local next build",
"build:prod": "env-cmd -f .env.prod next build",
"start": "next start",
"lint": "next lint"
},
}
수정 후 코드
{
"scripts": {
"dev": "next dev",
"build": "next build",
"build:dev": "env-cmd -f .env.dev next build",
"build:local": "env-cmd -f .env.local next build",
"build:prod": "env-cmd -f .env.prod next build",
"start": "next start",
"lint": "next lint"
},
}
next export
때문에 발생한 에러였다 (next export
는 정적 페이지를 내보내는 명령어).getStaticProps
를 사용한다면 문제가 없지만, 해당 페이지는getServerSideProps
를 사용한다.
(📌 공식문서에도 나와있듯이export
를 지운다고 해도 정적페이지 내보내기를 하지 못하는 것은 아니다. getStaticProps를 사용하는 페이지는 알아서 정적페이지로 export해주기 때문!)
Build 성공!