Remix + Vite で CloudFront 経由でクライアントの資材を配布したい
vite.config で base
を設定すると remix のほうでビルドした build/client
がホスティングされなくなるっぽい。なので、CloudFront のオリジンが その remix サーバだと、base
に CloudFrontのドメインをして指定するとオリジンから build/client
が配布されなくなり、この方式だとremixがクライアント資産を配布しつつ、ユーザにはCloudFront経由でアクセスさせる作戦は無理っぽい?
remix の起動コマンドである packages/remix-serve/cli.ts
の build/client とかのフロント用の資産の配布している箇所。
-
build.publicPath
は vite.config でbase
で指定したものがそのまま渡る -
build.assetsBuildDirectory
は Remix のデフォルトだとbuild/client
-> base
に CloudFront の URL を指定すると remix サーバ自身はこれをサーブできなくなる
Viteの base
の説明
Shared Options | Viteより
Base public path when served in development or production. Valid values include:
- Absolute URL pathname, e.g. /foo/
- Full URL, e.g. https://bar.com/foo/ (The origin part won't be used in development so the value is the same as /foo/)
- Empty string or ./ (for embedded deployment)
See Public Base Path for more details.
Remix が Vite を採用するにあたって、publicPath
は base
に置き換えられた旨
Vite | Remix より
publicPath has been replaced by Vite's "base" option which defaults to "/" rather than "/build/".
この方は base
を指定しつつ、クライアントリソース配布箇所を手動でサーブするようにした模様
結論: 現在のバージョン(v2.13.1)では正攻法では無理っぽい。
なので、 CloudFront で build/client
以下のファイル配布したい場合は、これを S3 に展開して vite.config.js で base
を CloudFront のものに指定するしかない。