Future Flags
次のフューチャーフラグは安定しており、採用する準備ができています。フューチャーフラグの詳細については、開発戦略を参照してください。
最新のv2.xへのアップデート
最新のフューチャーフラグを利用するには、まずv2.xの最新マイナーバージョンにアップデートしてください。
👉 最新のv2にアップデート
Vite Plugin
背景
Remixは、独自のクローズドコンパイラ(現在は「クラシックコンパイラ」と呼ばれています)を使用せず、Viteを使用するようになりました。Viteは、JavaScriptプロジェクトのための強力で高性能、拡張可能な開発環境です。Viteドキュメントでは、パフォーマンス、トラブルシューティングなどの詳細を確認できます。
これはフューチャーフラグではありませんが、新しい機能と一部のフューチャーフラグはViteプラグインでのみ利用可能であり、クラシックコンパイラはRemixの次のバージョンで削除される予定です。
👉 Viteをインストール
コードのアップデート
👉 Remixアプリのルートにあるremix.config.js
をvite.config.ts
に置き換える
サポートされているRemix構成オプションのサブセットは、プラグインに直接渡す必要があります。
👉 <LiveReload/>
を削除し、<Scripts />
を残す
👉 tsconfig.json
をアップデートする
tsconfig.json
のtypes
フィールドをアップデートし、skipLibCheck
、module
、moduleResolution
がすべて正しく設定されていることを確認してください。
👉 remix.env.d.ts
をアップデート/削除する
remix.env.d.ts
内の次の型宣言を削除してください。
remix.env.d.ts
が空になったら、削除してください。
パスエイリアスの設定
Viteはデフォルトでパスエイリアスを提供しません。~
をapp
ディレクトリのエイリアスとして定義するなど、この機能に依存していた場合は、vite-tsconfig-pathsプラグインをインストールして、Viteのtsconfig.json
からパスエイリアスを自動的に解決し、Remixコンパイラの動作に合わせることができます。
👉 vite-tsconfig-paths
をインストールする
👉 Vite構成にvite-tsconfig-paths
を追加する
@remix-run/css-bundle
を削除する
Viteは、CSS副作用インポート、PostCSS、CSS Modulesなど、他のCSSバンドル機能に対する組み込みのサポートを提供しています。Remix Viteプラグインは、バンドルされたCSSを関連するルートに自動的にアタッチします。
@remix-run/css-bundle
パッケージは、Viteを使用する場合は冗長です。そのcssBundleHref
エクスポートは常にundefined
になるためです。
👉 @remix-run/css-bundle
をアンインストールする
👉 cssBundleHref
への参照を削除する
links
内で参照されているCSSインポートを修正する
CSSをlinks
関数内で参照している場合は、対応するCSSインポートをViteの明示的な?url
インポート構文を使用するように更新する必要があります。
👉 links
で使用されているCSSインポートに?url
を追加する
Tailwind CSSまたはVanilla Extractの移行
Tailwind CSSまたはVanilla Extractを使用している場合は、完全な移行ガイドを参照してください。
Remix App Serverからの移行
👉 dev
、build
、start
スクリプトをアップデートする
👉 Vite構成にグローバルNodeポリフィルをインストールする
👉 Vite devサーバーポートを設定する(オプション)
カスタムサーバーの移行
カスタムサーバーまたはCloudflare Functionsを移行している場合は、完全な移行ガイドを参照してください。
MDXルートの移行
MDXを使用している場合は、公式のMDX Rollupプラグインを使用する必要があります。ステップバイステップのチュートリアルについては、完全な移行ガイドを参照してください。
v3_fetcherPersist
背景
フェッチャーのライフサイクルは、所有者コンポーネントのマウント解除時ではなく、アイドル状態に戻るタイミングに基づくようになりました。詳細については、RFCを参照してください。
👉 フラグを有効にする
コードのアップデート
アプリケーションへの影響はほとんどないと思われます。useFetchers
の使用状況を確認し、以前よりも長く持続する可能性があるかどうかを確認する必要があります。実行している処理によっては、以前よりも長くレンダリングされる場合があります。
v3_relativeSplatPath
背景
dashboard/*
(単なる*
に対して)のように、マルチセグメントスプラットパスに対する相対パスマッチングとリンクを変更します。詳細については、CHANGELOGを参照してください。
👉 フラグを有効にする
コードのアップデート
dashboard.$.tsx
またはroute("dashboard/*")
のように、パスとスプラットを持つルートで、その下に"<Link to="relative">"
または"<Link to="../relative">"
などの相対リンクがある場合は、コードを更新する必要があります。
👉 ルートを2つに分割する
スプラットルートがある場合は、レイアウトルートと、スプラットを含む子ルートに分割します。
👉 相対リンクをアップデートする
そのルートツリー内の相対リンクを持つ"<Link>"
要素をすべてアップデートし、同じ場所にリンクし続けるために、余分な..
相対セグメントを含めます。
v3_throwAbortReason
背景
ユーザーがローダーが完了する前にページから移動した場合など、サーバー側のリクエストが中止されると、Remixはnew Error("query() call aborted...")
などのエラーではなく、request.signal.reason
をスローします。
👉 フラグを有効にする
コードのアップデート
以前のエラーメッセージに一致させて他のエラーと区別していたhandleError
内のカスタムロジックがない限り、コードを調整する必要はありません。
v3_singleFetch
背景
このフラグにより、Remixはアプリ内でSPAナビゲーションを行う場合のデータ要求に対して、「単一フェッチ」アプローチに移行します。詳細については、ドキュメントを参照してください。このアプローチに移行することを選択した主な理由は、シンプルさです。Single Fetchでは、データ要求はドキュメント要求と同じように動作するようになり、開発者はヘッダー、キャッシュなどの管理方法を2つの間でどのように異ならせるかについて考える必要がなくなります。より高度なユースケースの場合、開発者は引き続き細かい再検証を選択できます。
👉 フラグ(および型)を有効にする
コードのアップデート
このフラグを有効にすると、ほとんどの場合、コードをそのまま使用できます。ただし、次の変更は時間とともに加える必要があり、次のメジャーバージョン以前に行う必要があります。
👉 json()/defer()
を生のオブジェクトに置き換える
Single Fetchは、JSONオブジェクトとPromiseをネイティブにサポートしているので、loader
/action
関数から生のデータを返すことができます。
json
/defer
の2番目のパラメーターを使用して、レスポンスにカスタムステータスまたはヘッダーを設定していた場合は、新しいdata
APIを使用して引き続き行うことができます。
👉 サーバーの中止遅延を調整する
entry.server.tsx
ファイルでカスタムABORT_DELAY
を使用していた場合は、Single Fetchで利用されている新しいstreamTimeout
APIを使用するように変更する必要があります。
v3_lazyRouteDiscovery
背景
このフラグを使用すると、Remixは最初のロード時にクライアントに完全なルートマニフェストを送信しなくなります。代わりに、サーバーレンダリングされたルートのみをマニフェストに送信し、ユーザーがアプリケーション内を移動するときに残りのルートを取得します。詳細については、ドキュメントとブログ投稿を参照してください。
👉 フラグを有効にする
コードのアップデート
この機能を使用するために、アプリケーションコードを変更する必要はありません。
特定のリンクで積極的なルート検出を無効にしたい場合は、新しい<Link discover>
APIを使用することができます。
unstable_optimizeDeps
開発中に依存関係の最適化を自動的に行うようにします。このフラグは、React Router v7まで「不安定」な状態のままとなるため、Remix v2アプリでReact Router v7にアップグレードする前に、このフラグを採用する必要はありません。