バージョン 11
バージョン11にアップグレードするには、次のコマンドを実行します:
補足: TypeScriptを使用している場合、
@types/react
と@types/react-dom
も対応するバージョンにアップグレードしてください。
Webpack 5
Webpack 5はすべてのNext.jsアプリケーションでデフォルトになりました。カスタムwebpack構成がない場合、アプリケーションは既にwebpack 5を使用しています。カスタムwebpack構成がある場合は、Next.js webpack 5ドキュメントを参照してアップグレードガイダンスを確認してください。
distDir
のクリーニングがデフォルトに
ビルド出力ディレクトリ(デフォルトで.next
)が、Next.jsのキャッシュを除いて、デフォルトでクリアされるようになりました。詳細については、distDir
のクリーニングに関するRFCを参照してください。
以前このふるまいに依存していた場合は、next.config.js
でcleanDistDir: false
フラグを追加することで、新しいデフォルトの動作を無効にできます。
next dev
とnext start
でPORT
がサポートされました
Next.js 11では、アプリケーションを実行するポートを設定するためにPORT
環境変数をサポートしています。-p
/--port
を使用することが推奨されますが、-p
を使用できない場合は、PORT
を代替として使用できます:
例:
PORT=4000 next start
画像のインポートに関するnext.config.js
のカスタマイズ
Next.js 11はnext/image
での静的画像インポートをサポートしています。この新機能は、画像インポートを処理できることに依存しています。以前にnext-images
またはnext-optimized-images
パッケージを追加していた場合は、next/image
を使用した新しい組み込みサポートに移行するか、機能を無効にできます:
pages/_app.js
からsuper.componentDidCatch()
を削除
next/app
コンポーネントのcomponentDidCatch
は、Next.js 9で非推奨となり、不要になり、その後no-opとなっていました。Next.js 11で削除されました。
pages/_app.js
にカスタムのcomponentDidCatch
メソッドがある場合、super.componentDidCatch
は不要なので削除できます。
pages/_app.js
からContainer
を削除
この出力は、Next.js 9で非推奨となり、不要になり、その後開発中に警告付きのno-opとなっていました。Next.js 11で削除されました。
pages/_app.js
がnext/app
からContainer
をインポートしている場合、Container
は削除されたので削除できます。詳細はドキュメントを参照してください。
ページコンポーネントからprops.url
の使用を削除
このプロパティはNext.js 4で非推奨となり、その後開発中に警告が表示されていました。getStaticProps
/ getServerSideProps
の導入により、これらのメソッドは既にprops.url
の使用を禁止していました。Next.js 11で完全に削除されました。
詳細はドキュメントを参照してください。
next/image
のunsized
プロパティを削除
next/image
のunsized
プロパティは、Next.js 10.0.1で非推奨となりました。代わりにlayout="fill"
を使用できます。Next.js 11でunsized
が削除されました。
next/dynamic
のmodules
プロパティを削除
next/dynamic
のmodules
とrender
オプションは、Next.js 9.5で非推奨となりました。これはnext/dynamic
APIをReact.lazy
に近づけるために行われました。Next.js 11で、modules
とrender
オプションが削除されました。
このオプションはNext.js 8以降ドキュメントに記載されていないため、アプリケーションで使用している可能性は低いです。
アプリケーションがmodules
とrender
を使用している場合は、ドキュメントを参照してください。
Head.rewind
を削除
Head.rewind
は、Next.js 9.5以降no-opでした。Next.js 11で削除されました。Head.rewind
の使用を安全に削除できます。
Moment.jsのロケールをデフォルトで除外
Moment.jsは、デフォルトで多くのロケールの翻訳を含んでいます。Next.jsは、Moment.jsを使用するアプリケーションのバンドルサイズを最適化するために、これらのロケールをデフォルトで自動的に除外するようになりました。
特定のロケールをロードするには、次のスニペットを使用します:
この新しいデフォルトを無効にするには、next.config.js
にexcludeDefaultMomentLocales: false
を追加できます。ただし、この新しい最適化によりMoment.jsのサイズが大幅に削減されるため、無効にしないことを強くお勧めします。
router.events
の使用方法を更新
レンダリング中にrouter.events
にアクセスしている場合、Next.js 11では、事前レンダリング中にrouter.events
が提供されなくなりました。useEffect
でrouter.events
にアクセスすることを確認してください:
アプリケーションが公開されていない内部プロパティのrouter.router.events
を使用している場合は、router.events
も使用するようにしてください。
React 16から17
React 17は、新しいJSXトランスフォームを導入しました。これは、長年Next.jsの機能であった、JSXを使用する際にimport React from 'react'
を不要にするものを、より広いReactエコシステムにもたらします。React 17を使用する場合、Next.jsは自動的に新しいトランスフォームを使用します。このトランスフォームは、React
変数をグローバルにしません。これは、以前のNext.jsの実装の意図しない副作用でした。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