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
setupEnv in remix.config.js
- Using
injectEnv to markup in entry.server.tsx
remix.config.js
+ const { setUpEnv } = require('remix-env')
+ setUpEnv()
/**
* @type {import('@remix-run/dev').AppConfig}
*/
module.exports = {
// any configa
}
entry.server.tsx
import { renderToString } from "react-dom/server";
import type {
EntryContext,
HandleDataRequestFunction,
} from "@remix-run/node"; // or cloudflare/deno
import { RemixServer } from "@remix-run/react";
+ import { injectEnv } from 'remix-env'
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)
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_");
})