バージョン11
バージョン11にアップグレードするには、次のコマンドを実行してください:
npm i next@11 react@17 react-dom@17
yarn add next@11 react@17 react-dom@17
pnpm up next@11 react@17 react-dom@17
bun add next@11 react@17 react-dom@17
補足: TypeScriptを使用している場合、
@types/react
と@types/react-dom
も対応するバージョンにアップグレードしてください。
Webpack 5
Webpack 5がすべてのNext.jsアプリケーションのデフォルトになりました。カスタムwebpack設定がない場合、アプリケーションはすでにwebpack 5を使用しています。カスタム設定がある場合は、Next.js webpack 5ドキュメントを参照してアップグレードしてください。
distDir
のクリーンアップがデフォルトに
ビルド出力ディレクトリ(デフォルトは.next
)は、Next.jsキャッシュを除きデフォルトでクリアされるようになりました。詳細はcleaning 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
機能に移行するか、以下のように無効化できます:
module.exports = {
images: {
disableStaticImages: true,
},
}
pages/_app.js
からsuper.componentDidCatch()
を削除
next/app
コンポーネントのcomponentDidCatch
はNext.js 9で非推奨となり、Next.js 11で削除されました。pages/_app.js
にカスタムcomponentDidCatch
メソッドがある場合、super.componentDidCatch
は不要なので削除できます。
pages/_app.js
からContainer
を削除
このエクスポートはNext.js 9で非推奨となり、Next.js 11で削除されました。pages/_app.js
でnext/app
からContainer
をインポートしている場合は削除してください。詳細はドキュメントを参照。
ページコンポーネントからprops.url
の使用を削除
このプロパティはNext.js 4で非推奨となり、Next.js 11で完全に削除されました。getStaticProps
/getServerSideProps
の導入により、これらのメソッドではすでにprops.url
の使用が禁止されていました。詳細はドキュメントを参照。
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.js 11で削除されました。これはnext/dynamic
APIをReact.lazy
に近づけるためです。
これらのオプションを使用している場合はドキュメントを参照してください。
Head.rewind
を削除
Head.rewind
はNext.js 9.5以降無効化されていましたが、Next.js 11で完全に削除されました。安全に削除できます。
Moment.jsロケールがデフォルトで除外
Moment.jsのロケール翻訳はデフォルトで除外されるようになり、バンドルサイズが最適化されました。特定のロケールを読み込むには:
import moment from 'moment'
import 'moment/locale/ja'
moment.locale('ja')
この最適化を無効にするにはnext.config.js
にexcludeDefaultMomentLocales: false
を追加しますが、非推奨です。
router.events
の使用法を更新
Next.js 11では、プリレンダリング中にrouter.events
が提供されなくなりました。useEffect
内でアクセスするようにしてください:
useEffect(() => {
const handleRouteChange = (url, { shallow }) => {
console.log(
`App is changing to ${url} ${
shallow ? 'with' : 'without'
} shallow routing`
)
}
router.events.on('routeChangeStart', handleRouteChange)
return () => {
router.events.off('routeChangeStart', handleRouteChange)
}
}, [router])
内部プロパティrouter.router.events
を使用していた場合は、router.events
を使用するように変更してください。
React 16から17への移行
React 17では新しいJSX Transformが導入され、JSX使用時にimport React from 'react'
が不要になりました。React 17ではNext.jsが自動的に新しい変換を使用します。codemodを使用して、誤ってReact
をインポートせずに使用している箇所を修正できます。
Next.js 11ではReactの最小バージョンが17.0.2に更新されました。アップグレードするには:
npm install react@latest react-dom@latest
またはyarn
の場合:
yarn add react@latest react-dom@latest