環境変数を使いたい
Remix v2のお勉強で、ローカルで開発しながらCloudflareにデプロイして確認してます。
その際、workersやAPIのURLをローカルと本番環境で分けるために環境変数を使いました。
結構特殊でなかなか時間とかした・・・。
公式
公式にpagesの場合は特殊だからこうしてねっ!って書いてありました。 remix.run
.dev.vars
環境変数は.envではなく、.dev.varsに書きます。
BASE_URL = "http://localhost"
これで、wrangler pages devで実行した際に環境変数として流れるみたいですね。
Using vars defined in .dev.vars Your worker has access to the following bindings: - Vars: - BASE_URL: "(hidden)" ⎔ Starting local server...
無事バインドされました。
loaderで取得
取得の方法がちょっと特殊。環境変数を取得する場合も、loader/actionを経て受け取らなければなりません。
export const loader = async ({ context }: LoaderFunctionArgs) => { const BASE_URL = context.env.BASE_URL; ... };
ただ、このままだとtypescriptの場合envがunknownでエラーになります。
なので、型書いて渡します。
type Env = { BASE_URL: string; }; export const loader = async ({ context }: LoaderFunctionArgs) => { const { BASE_URL } = context.env as Env; ... };
型についてGithubでコード検索してると、remix.env.d.tsにAppLoadContextを指定したコードもあったけど、力尽きてるのでまたいつか・・・。