Nuxt 4 のリリースに向けて準備を進めていますが、Nuxt v3.12 でも多くの改善を行いました。
🚀 Nuxt 4 の変更のテスト
Nuxt 4 が間近に迫っており、次のメジャーリリースで行われる動作の変更(#26925)を、nuxt.config
ファイルでオプションを設定することでテストできるようになりました。
export default defineNuxtConfig({
future: {
compatibilityVersion: 4,
},
})
Nuxt 4 の PR をマージする際に、このフラグの背後で有効化してきました。可能な限り後方互換性を目指しており、テストマトリックスでは v3 と v4 の互換性モードの両方で同じフィクスチャを実行しています。
10 以上の異なる PR と動作の変更について文書化およびテスト可能であり、多くの説明が必要ですが、移行手順を含む詳細については、v4 アップグレードドキュメントを参照してください。
Nuxt 4 での早期テストにご協力いただければ幸いです! 🙏
📜 Nuxt Scripts の自動インストール
Nuxt Scripts のリリースを着実に進めてきました。現在パブリックプレビュー段階ですが、公開リリースが間近であるため、(使用した場合)@nuxt/scripts
モジュールをインストールするように促す、コンポーザブルのスタブを追加しました。
👉ローンチと詳細を説明する記事にご注目ください!
🌈 レイヤーの自動登録とバグ修正
~/modules
と同様に、~/layers
ディレクトリ内のプロジェクト内のレイヤーは、プロジェクト内のレイヤーとして自動的に登録されるようになりました(#27221)。
また、レイヤーの依存関係を正しくロードするようになったため、モノレポと git インストールに関するさまざまな問題が解決されるはずです(#27338)。
🌐 組み込みアクセシビリティの改善
現在、組み込みの<NuxtRouteAnnouncer>
コンポーネントと対応するuseRouteAnnouncer
コンポーザブルがあり、これらは今後、新しい Nuxt テンプレートにデフォルトで追加されます。
詳細については、元の PR (#25741)とドキュメントを参照してください。
nuxt/a11y
の作業を継続しています - 今後の詳細にご期待ください!
🔥 パフォーマンスの改善
パフォーマンスの改善も実現しました。その多くはcompatibilityVersion: 4
フラグの背後にあるものですが、深く反応性の高い asyncData ペイロードからの移行などがあります。
重要な改善点としては、モジュールの重複排除(#27475)があります - これは、レイヤーでモジュールを指定するレイヤーユーザーに主に適用されます。あるプロジェクトでは、Nuxt の起動時間が 30 秒以上短縮されました。
また、一般的な ESM 依存関係を事前バンドルから除外することで、Vite 開発サーバーの起動時間を改善しました。モジュール作成者は同様の処理を行うことをお勧めします(#27372)。
チャンクの決定性を向上させたため、連続したビルドでチャンクハッシュが完全に異なる可能性が低くなりました(#27258)。
クライアントのみのコンポーザブルをサーバービルドからさらにツリーシェイクし(#27044)、サーバーコンポーネントペイロードのサイズを削減しました(#26863)。
👨👩👧👦 マルチアプリのサポート
multiApp
実験的フラグ(#27291)や、ランタイム時に複数の Nuxt アプリインスタンスを並列で実行できる機能(#27068)など、Nuxt でマルチアプリをネイティブにサポートする方向に向けたいくつかの変更を行いました。
まだ準備ができていませんが、トラッカーの問題をフォローし、興味があればご自由に貢献してください。
⛑️ DX の改善
開発サーバーのログで、VNode(#27309)とURLなど、より多くのものをシリアル化しました。また、開発サーバーがフリーズする可能性のあるバグも修正しました。
ブラウザでプライベートなランタイム設定にアクセスする際、より有益なエラーメッセージが表示されるようになりました(#26441)。
🪨 機能の安定化
安定化され、もはや設定する必要がないと考える実験的なオプションをいくつか削除しました。
experimental.treeshakeClientOnly
(v3.0.0 以降、デフォルトで有効)experimental.configSchema
(v3.3.0 以降、デフォルトで有効)experimental.polyfillVueUseHead
(v3.4.0 以降、無効) - プラグインを使用してユーザー側で実装可能experimental.respectNoSSRHeader
(v3.4.0 以降、無効) - サーバーミドルウェアを使用してユーザー側で実装可能
scanPageMeta
をデフォルトで有効化しました(#27134)。これにより、definePageMeta
マクロ内のページメタデータが抽出され、モジュール(@nuxtjs/i18n
など)で使用できるようになります。
これにより、モジュール/型付きルーティングの統合が大幅に向上しますが、パフォーマンスコストが発生する可能性があります。問題が発生した場合は、問題を報告してください。
💪 型の改善
サーバーコンポーネントで型付き#fallback
スロットがサポートされるようになりました(#27097)。
生成されたtsconfig.json
の一部のデフォルトも改善しました。ローカルにインストールされたTypeScript v5.4バージョンがある場合、module: 'preserve'
を設定しています(ドキュメントを参照) - #26667、#27485を参照してください。
📦 モジュール作成者/パワーユーザー向けの改善
モジュール作成者向けの型の改善をいくつか提供しました。
installModule
で型付きモジュールオプションのサポート(#26744)- モジュールオプションで特定のビルダー(vite/webpack)との互換性を指定するオプション(#27022)
- ブラウザのハイドレーションサイクルにフックするための新しい
onPrehydrate
フック(#27037) - 新しいビルド時の
useRuntimeConfig
とupdateRuntimeConfig
ユーティリティを使用して、モジュール内で解決済みのランタイム設定にアクセスして更新する機能(#27117)
🎨 インラインUIテンプレート
以前@nuxt/ui-templates
を使用していた場合、別のリポジトリからnuxt/nuxtモノレポに移動したことを知っておくと便利です。(これは単なるリファクタリングであり、変更ではありませんが、Nuxt v4では新しいデザインが期待できます。)
✅ アップグレード
いつものように、アップグレードするには次のコマンドを実行することをお勧めします。
npx nuxi@latest upgrade --force
これにより、ロックファイルも更新され、Nuxt が依存する他の依存関係(特に unjs エコシステム)の更新がプルされます。
完全なリリースノート
このリリースに関わってくださった75名以上の Nuxt コントリビューターとコミュニティメンバーに感謝します。 ❤️
最後に、ここまでお読みいただきありがとうございます! v3.12 を楽しんでいただければ幸いです。フィードバックや問題がありましたらお知らせください。 🙏
ハッピーヌクティング ✨