Remix アプリケーションサーバー
Remix は、ユーザーが自身のサーバーを所有することを想定して設計されていますが、サーバーをセットアップしたくない場合は、代わりに Remix アプリケーションサーバーを使用できます。これは、Express で構築された、本番環境に対応した基本的な Node.js サーバーです。
設計上、Remix アプリケーションサーバーをカスタマイズするためのオプションは提供していません。これは、基盤となる express
サーバーをカスタマイズする必要がある場合は、考えられるすべてのカスタマイズを処理するための抽象化を作成するのではなく、サーバーを完全に管理していただきたいからです。カスタマイズが必要な場合は、代わりに @remix-run/express
アダプターを使用する必要があります。
基盤となる express
サーバーの構成は、packages/remix-serve/cli.ts で確認できます。デフォルトでは、次の Express ミドルウェアを使用します(デフォルトの動作については、それぞれのドキュメントを参照してください)。
compression
express.static
(したがってserve-static
)morgan
HOST
環境変数
process.env.HOST
を介して Express アプリケーションのホスト名を構成できます。この値は、サーバーの起動時に内部の app.listen
メソッドに渡されます。
PORT
環境変数
環境変数を使用してサーバーのポートを変更できます。
開発環境
process.env.NODE_ENV
に応じて、サーバーは開発モードまたは本番モードで起動します。
server-build-path
は、remix.config.js
で定義された serverBuildPath
を指している必要があります。
本番環境にデプロイする必要があるのはビルド成果物 (build/
, public/build/
) のみであるため、remix.config.js
が本番環境で利用可能であるとは限りません。そのため、このオプションを使用して、サーバービルドの場所を Remix に伝える必要があります。
開発環境では、remix-serve
は、リクエストごとに require
キャッシュをパージすることで、最新のコードが実行されるようにします。これにより、コードに影響を与える可能性のあるいくつかの点に注意する必要があります。
-
モジュールスコープ内の値は「リセット」されます。
開発環境でキャッシュを保持するための回避策が必要な場合は、サーバーで シングルトン を設定できます。
-
モジュールの副作用 はそのまま残ります!これは問題を引き起こす可能性がありますが、いずれにしても避けるべきです。
このようなモジュールの副作用がある方法でコードを記述する必要がある場合は、独自の @remix-run/express サーバーと、ファイル変更時にサーバーを再起動するための pm2-dev や nodemon などの開発ツールを設定する必要があります。
本番環境では、これは発生しません。サーバーが起動したら、それで終わりです。