remix-env
Easy way to use process.env in your Remix apps
Setup
app/entry.server.tsx
- Run
npm install remix-env or yarn add remix-env
- Add
createEnv before handleRequest
- Using
injectEnv to markup
- Replace the reponse with the result from
injectEnv
import { renderToString } from "react-dom/server";
import type {
EntryContext,
HandleDataRequestFunction,
} from "@remix-run/node"; // or cloudflare/deno
import { RemixServer } from "@remix-run/react";
+ import { createEnv, injectEnv } from 'remix-env'
+ const publicEnv = createEnv()
export default function handleRequest(
request: Request,
responseStatusCode: number,
responseHeaders: Headers,
remixContext: EntryContext
) {
const markup = renderToString(
<RemixServer context={remixContext} url={request.url} />
);
+ const markUpWithEnv = injectEnv(markup, publicEnv)
responseHeaders.set("Content-Type", "text/html");
- return new Response("<!DOCTYPE html>" + markUp, {
+ return new Response("<!DOCTYPE html>" + markUpWithEnv, {
status: responseStatusCode,
headers: responseHeaders,
});
}
Usage
Now, You can use the getEnv to get your env
const env = getEnv()
export default function IndexRoute() {
return (
<div>
{env.PUBLIC_ENV_FOO}
</div>
);
}
Configuration
By default this library will inject all environment variables with prefix PUBLIC_ENV_ to the browser.
But you can customize it by provide the filter function at createEnv.
const publicEnv = createEnv({ filterEnv: (key, value) => {
return key.startsWith("PUBLIC_ENV_");
})