Version 11

버전 11로 업그레이드하려면 다음 명령어를 실행하세요:

Terminal
npm i next@11 react@17 react-dom@17
Terminal
yarn add next@11 react@17 react-dom@17
Terminal
pnpm up next@11 react@17 react-dom@17
Terminal
bun add next@11 react@17 react-dom@17

참고: TypeScript를 사용하는 경우, @types/react@types/react-dom 도 해당 버전으로 업그레이드해야 합니다.

Webpack 5

이제 모든 Next.js 애플리케이션에 대해 Webpack 5가 기본값으로 설정됩니다. 커스텀 Webpack 구성을 하지 않았다면, 애플리케이션은 이미 Webpack 5를 사용 중입니다. 커스텀 Webpack 구성이 있는 경우, 업그레이드 지침은 Next.js webpack 5 문서를 참조하세요.

Cleaning the distDir is now a default

빌드 출력 디렉토리(기본값은 .next)가 이제 기본적으로 Next.js 캐시를 제외하고 정리됩니다. 자세한 내용은 빌드 출력 디렉토리 정리 RFC (opens in a new tab)를 참조하세요.

애플리케이션이 이전에 이 동작에 의존하고 있었다면 next.config.jscleanDistDir: false 플래그를 추가하여 새로운 기본 동작을 비활성화할 수 있습니다.

PORT is now supported for next dev and next start

Next.js 11은 애플리케이션이 실행되는 포트를 설정하기 위해 PORT 환경 변수를 지원합니다. 여전히 -p/--port 사용이 권장되지만, 어떤 이유로든 -p 를 사용할 수 없는 경우 PORT 를 대안으로 사용할 수 있습니다:

예시:

PORT=4000 next start

next.config.js customization to import images

Next.js 11은 next/image 를 사용한 정적 이미지 가져오기를 지원합니다. 이 새로운 기능은 이미지 가져오기를 처리할 수 있어야 합니다. 이전에 next-images 또는 next-optimized-images 패키지를 추가했다면 새로운 내장 지원을 사용하거나 기능을 비활성화할 수 있습니다:

next.config.js
module.exports = {
  images: {
    disableStaticImages: true,
  },
}

Remove super.componentDidCatch() from pages/_app.js

next/app 컴포넌트의 componentDidCatch 는 더 이상 필요하지 않기 때문에 Next.js 9에서 사용 중단되었으며, 이후로는 no-op이었습니다. Next.js 11에서는 이것이 제거되었습니다.

만약 pages/_app.js 에 커스텀 componentDidCatch 메서드가 있다면, 더 이상 필요하지 않으므로 super.componentDidCatch 를 제거할 수 있습니다.

Remove Container from pages/_app.js

이 익스포트는 더 이상 필요하지 않기 때문에 Next.js 9에서 사용 중단되었으며, 개발 중 경고와 함께 no-op이었습니다. Next.js 11에서는 이것이 제거되었습니다.

만약 pages/_app.js가 next/app에서 Container를 가져오고 있다면, Container를 제거할 수 있습니다. 자세한 내용은 문서를 참조하세요.

Remove props.url usage from page components

이 속성은 Next.js 4에서 사용 중단되었으며, 이후 개발 중 경고를 표시했습니다. getStaticProps / getServerSideProps 도입으로 이 메서드들은 이미 props.url 사용을 금지했습니다. Next.js 11에서는 이것이 완전히 제거되었습니다.

자세한 내용은 문서를 참조하세요.

Remove unsized property on next/image

next/imageunsized 속성은 Next.js 10.0.1에서 사용 중단되었습니다. 대신 layout="fill" 을 사용할 수 있습니다. Next.js 11에서는 unsized 가 제거되었습니다.

Remove modules property on next/dynamic

next/dynamicmodulesrender 옵션은 Next.js 9.5에서 사용 중단되었습니다. 이는 next/dynamic API를 React.lazy 와 더 가깝게 만들기 위함이었습니다. Next.js 11에서는 modulesrender 옵션이 제거되었습니다.

이 옵션은 Next.js 8 이후 문서에서 언급되지 않았기 때문에 애플리케이션에서 사용 중일 가능성은 적습니다.

만약 애플리케이션이 modulesrender 를 사용하고 있다면, 문서를 참조하세요.

Remove Head.rewind

Head.rewind 는 Next.js 9.5 이후로 no-op이었으며, Next.js 11에서는 제거되었습니다. Head.rewind 사용을 안전하게 제거할 수 있습니다.

Moment.js locales excluded by default

Moment.js는 기본적으로 많은 로케일에 대한 번역을 포함합니다. Next.js는 이제 Moment.js를 사용하는 애플리케이션의 번들 크기를 최적화하기 위해 기본적으로 이러한 로케일을 제외합니다.

특정 로케일을 로드하려면 다음 코드를 사용하세요:

import moment from 'moment'
import 'moment/locale/ja'
 
moment.locale('ja')

새로운 동작을 원하지 않는 경우 next.config.jsexcludeDefaultMomentLocales: false 를 추가하여 이 새로운 기본값을 옵트아웃할 수 있지만, 이 새로운 최적화를 비활성화하지 않는 것이 번들 크기를 크게 줄이기 때문에 매우 권장됩니다.

Update usage of router.events

렌더링 중에 router.events 에 접근하는 경우, Next.js 11에서는 프리렌더링 중 router.events 가 더 이상 제공되지 않습니다. useEffect 에서 router.events 에 접근하는지 확인하세요:

useEffect(() => {
  const handleRouteChange = (url, { shallow }) => {
    console.log(
      `App is changing to ${url} ${
        shallow ? 'with' : 'without'
      } shallow routing`,
    )
  }
 
  router.events.on('routeChangeStart', handleRouteChange)
 
  // 컴포넌트가 언마운트되면 이벤트에서 구독 해제
  // `off` 메서드를 사용하여:
  return () => {
    router.events.off('routeChangeStart', handleRouteChange)
  }
}, [router])

애플리케이션이 공개되지 않은 내부 속성인 router.router.events 를 사용하는 경우 router.events 를 사용해야 합니다.

React 16 to 17

React 17은 JSX를 사용할 때 import React from 'react'를 생략할 수 있는 새로운 JSX Transform (opens in a new tab)를 도입했습니다. React 17을 사용할 때 Next.js는 자동으로 새로운 변환을 사용합니다. 이 변환은 이전 Next.js 구현의 의도하지 않은 부작용이었던 React 변수를 전역으로 만들지 않습니다. React를 임포트하지 않고 실수로 사용한 경우 자동으로 수정할 수 있는 codemod가 제공됩니다.

대부분의 애플리케이션은 이미 최신 버전의 React를 사용하고 있으며, Next.js 11에서는 최소 React 버전이 17.0.2로 업데이트되었습니다.

업그레이드하려면 다음 명령어를 실행하세요:

npm install react@latest react-dom@latest

또는 yarn 을 사용하여:

yarn add react@latest react-dom@latest