バージョン12へのアップグレード方法
バージョン12にアップグレードするには、以下のコマンドを実行してください:
補足: TypeScriptを使用している場合、
@types/react
と@types/react-dom
も対応するバージョンにアップグレードしてください。
12.2へのアップグレード
ミドルウェア - 12.2
以前でミドルウェアを使用していた場合、詳細はアップグレードガイドを参照してください。
12.0へのアップグレード
Node.jsの最低バージョン - Node.jsの最低バージョン要件が12.0.0
からネイティブESモジュールをサポートする最初のバージョンである12.22.0
に引き上げられました。
Reactの最低バージョン - Reactの最低要件バージョンは17.0.2
です。アップグレードするには、ターミナルで以下のコマンドを実行します:
BabelからSWCへの移行
Next.jsでは現在、JavaScript/TypeScriptのコンパイルにRustベースのコンパイラSWCを使用しています。この新しいコンパイラは、個々のファイルのコンパイルにおいてBabelと比べて最大17倍、Fast Refreshでは最大5倍の高速化を実現しています。
Next.jsはカスタムBabel設定を持つアプリケーションとの完全な後方互換性を提供します。styled-jsxやgetStaticProps
/getStaticPaths
/getServerSideProps
のツリーシェイキングなど、Next.jsがデフォルトで処理するすべての変換はRustに移植されています。
アプリケーションにカスタムBabel設定がある場合、Next.jsは自動的にJavaScript/TypeScriptのコンパイルにSWCを使用せず、Next.js 11と同じようにBabelを使用するようにフォールバックします。
現在カスタムBabel変換を必要とする外部ライブラリとの統合の多くは、近い将来RustベースのSWC変換に移植される予定です。これには以下が含まれますが、これらに限定されません:
- Styled Components
- Emotion
- Relay
SWCの採用を支援する変換の優先順位付けを行うため、このフィードバックスレッドで.babelrc
を共有してください。
ミニフィケーションにTerserからSWCへ移行
next.config.js
でフラグを設定することで、JavaScriptのミニフィケーションにTerserの代わりに最大7倍高速なSWCをオプトインで使用できます:
SWCを使用したミニフィケーションはオプトインフラグとして提供され、Next.js 12.1でデフォルトになる前により多くの実際のNext.jsアプリケーションでテストできるようになっています。ミニフィケーションに関するフィードバックがある場合は、このフィードバックスレッドに投稿してください。
styled-jsxのCSSパーシング改善
Rustベースのコンパイラに加えて、styled-jsxのBabel変換で使用されているものに基づいた新しいCSSパーサーを実装しました。この新しいパーサーはCSSの処理が改善され、以前は検出されず予期しない動作を引き起こしていた不正なCSSが開発時やnext build
時にエラーとして報告されるようになりました。
この変更により、不正なCSSは開発時とnext build
時にエラーをスローします。この変更はstyled-jsxの使用にのみ影響します。
next/image
のラッピング要素変更
next/image
は現在、<img>
を<div>
ではなく<span>
内にレンダリングします。
アプリケーションに.container span
のようなspanを対象とした特定のCSSがある場合、Next.js 12にアップグレードすると<Image>
コンポーネント内のラッピング要素が誤ってマッチする可能性があります。これを回避するには、セレクタを.container span.item
のような特定のクラスに制限し、関連するコンポーネントを<span className="item" />
のように更新してください。
アプリケーションにnext/image
の<div>
タグを対象とした特定のCSS(例:.container div
)がある場合、マッチしなくなる可能性があります。セレクタを.container span
に更新するか、好ましくは<Image>
コンポーネントを<div className="wrapper">
でラップし、.container .wrapper
のように対象にしてください。
className
プロパティは変更されておらず、引き続き基礎となる<img>
要素に渡されます。
詳細はドキュメントを参照してください。
HMR接続がWebSocketを使用するように変更
以前、Next.jsはHMRイベントを受信するためにserver-sent events接続を使用していました。Next.js 12ではWebSocket接続を使用するようになりました。
Next.js開発サーバーへのリクエストをプロキシする場合、アップグレードリクエストが正しく処理されるようにする必要がある場合があります。例えば、nginx
では以下の設定を追加する必要があります:
Apache(2.x)を使用している場合、サーバーにWebSocketを有効にするために以下の設定を追加できます。ポート、ホスト名、サーバー名を確認してください。
express
のようなカスタムサーバーの場合、リクエストが正しく渡されるようにapp.all
を使用する必要があるかもしれません。例:
Webpack 4のサポート終了
既にwebpack 5を使用している場合はこのセクションをスキップできます。
Next.jsはNext.js 11でコンパイルのデフォルトとしてwebpack 5を採用しました。webpack 5アップグレードドキュメントで告知した通り、Next.js 12ではwebpack 4のサポートが削除されました。
アプリケーションがまだオプトアウトフラグを使用してwebpack 4を使用している場合、webpack 5アップグレードドキュメントへのリンクを含むエラーが表示されます。
target
オプションの非推奨化
next.config.js
にtarget
が含まれていない場合はこのセクションをスキップできます。
targetオプションは非推奨となり、ページを実行するために必要な依存関係をトレースする組み込みサポートに置き換えられました。
next build
中、Next.jsは自動的に各ページとその依存関係をトレースし、アプリケーションの本番バージョンをデプロイするために必要なすべてのファイルを決定します。
現在target
オプションをserverless
に設定している場合は、新しい出力を活用する方法に関するドキュメントを参照してください。