feat(dev): expose setReactRouterDevLoadContext#13326
feat(dev): expose setReactRouterDevLoadContext#13326albertusdev wants to merge 2 commits intoremix-run:devfrom
setReactRouterDevLoadContext#13326Conversation
|
|
Hi @albertusdev, Welcome, and thank you for contributing to React Router! Before we consider your pull request, we ask that you sign our Contributor License Agreement (CLA). We require this only once. You may review the CLA and sign it by adding your name to contributors.yml. Once the CLA is signed, the If you have already signed the CLA and received this response in error, or if you have any questions, please contact us at hello@remix.run. Thanks! - The Remix team |
|
Thank you for signing the Contributor License Agreement. Let's get this merged! 🥳 |
|
hi @brophdawg11! sorry for the tag here, not sure which contributors should I ping to get this small PR reviewed. appreciate your help here! |
setReactRouterDevLoadContext
|
Thanks for the PR! One concern I have with the approach in this PR is it assumes the server is running in the same environment as Vite, but with our newly added support for the Vite Environment API, this is no longer guaranteed. For example, when using Any API for make setting a load context easier would probably work better a file to be configured in your React Router config, e.g. We'd still need to discuss whether this is something we want to support, so could you help us by providing a bit more detail about your use case? |
@markdalgleish sorry for the late reply! thank you for raising this point. You are right. My use case here is to make it so easy to make setting a load context much much easier and consistent when running react-router codebase in a local development environment by reusing the When I raised this PR a month ago or so Cloudflare hasn't released their Vite plugin yet in GA, and I was trying to deploy a Since then, I gave up on deploying it to Vercel and because I saw that Cloudflare just released the official Vite plugin + support for react-router, I decided to switch to Cloudflare Workers instead. Thanks to Wrangler + Miniflare which provides a consistent local development environment, this was no longer an issue for me when I knew that we could modify the import type { ExportedHandler, ExportedHandlerFetchHandler } from '@cloudflare/workers-types'
import { createRequestHandler } from 'react-router'
import { getLoadContext } from '../load-context'
type Env = Record<string, string>
const onRequest = createRequestHandler(
() => import('virtual:react-router/server-build'),
import.meta.env.MODE
)
export default {
async fetch(request, env, ctx) {
return onRequest(request as unknown as Request, {
cloudflare: { env, ctx },
...getLoadContext({
request: request as unknown as Request,
context: { cloudflare: { env, ctx } },
}),
}) as unknown as ReturnType<ExportedHandlerFetchHandler<Env>>
},
} satisfies ExportedHandler<Env>This setup works like a charm for my usecase, albeit the documentation was not obvious and it took me some time to figure this out. +I really like your suggestion to probably expose a |
|
I'm going to close this for now according to our new Open Governance model. Would you mind opening a proposal for consideration/discussion and copying over some of the above comments? |
Purpose
This PR exposes the
setReactRouterDevLoadContextfunction from the vite plugin, allowing developers to easily set a custom load context for the dev server without requiring a custom server entrypoint.Problem
Currently, to provide a custom "load context" for server-side loaders and actions during development, developers must either:
Both approaches require additional configuration and setup just to supply environment variables or other data to loaders and actions during development.
Solution
By exposing the existing
setReactRouterDevLoadContextfunction, developers can achieve the same result with a much simpler approach: