Push V1 app
This commit is contained in:
+66
@@ -0,0 +1,66 @@
|
||||
---
|
||||
title: Server Bundles
|
||||
---
|
||||
|
||||
# Server Bundles
|
||||
|
||||
[MODES: framework]
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<docs-warning>This is an advanced feature designed for hosting provider integrations. When compiling your app into multiple server bundles, there will need to be a custom routing layer in front of your app directing requests to the correct bundle.</docs-warning>
|
||||
|
||||
React Router typically builds your server code into a single bundle that exports a request handler function. However, there are scenarios where you might want to split your route tree into multiple server bundles, each exposing a request handler function for a subset of routes. To provide this flexibility, [`react-router.config.ts`][react-router-config] supports a `serverBundles` option, which is a function for assigning routes to different server bundles.
|
||||
|
||||
The [`serverBundles` function][server-bundles-function] is called for each route in the tree (except for routes that aren't addressable, e.g., pathless layout routes) and returns a server bundle ID that you'd like to assign that route to. These bundle IDs will be used as directory names in your server build directory.
|
||||
|
||||
For each route, this function receives an array of routes leading to and including that route, referred to as the route `branch`. This allows you to create server bundles for different portions of the route tree. For example, you could use this to create a separate server bundle containing all routes within a particular layout route:
|
||||
|
||||
```ts filename=react-router.config.ts lines=[5-13]
|
||||
import type { Config } from "@react-router/dev/config";
|
||||
|
||||
export default {
|
||||
// ...
|
||||
serverBundles: ({ branch }) => {
|
||||
const isAuthenticatedRoute = branch.some((route) =>
|
||||
route.id.split("/").includes("_authenticated"),
|
||||
);
|
||||
|
||||
return isAuthenticatedRoute
|
||||
? "authenticated"
|
||||
: "unauthenticated";
|
||||
},
|
||||
} satisfies Config;
|
||||
```
|
||||
|
||||
Each `route` in the `branch` array contains the following properties:
|
||||
|
||||
- `id` — The unique ID for this route, named like its `file` but relative to the app directory and without the extension, e.g., `app/routes/gists.$username.tsx` will have an `id` of `routes/gists.$username`
|
||||
- `path` — The path this route uses to match the URL pathname
|
||||
- `file` — The absolute path to the entry point for this route
|
||||
- `index` — Whether this route is an index route
|
||||
|
||||
## Build manifest
|
||||
|
||||
When the build is complete, React Router will call the `buildEnd` hook, passing a `buildManifest` object. This is useful if you need to inspect the build manifest to determine how to route requests to the correct server bundle.
|
||||
|
||||
```ts filename=react-router.config.ts lines=[5-7]
|
||||
import type { Config } from "@react-router/dev/config";
|
||||
|
||||
export default {
|
||||
// ...
|
||||
buildEnd: async ({ buildManifest }) => {
|
||||
// ...
|
||||
},
|
||||
} satisfies Config;
|
||||
```
|
||||
|
||||
When using server bundles, the build manifest contains the following properties:
|
||||
|
||||
- `serverBundles` — An object that maps bundle IDs to the bundle's `id` and `file`
|
||||
- `routeIdToServerBundleId` — An object that maps route IDs to their server bundle ID
|
||||
- `routes` — A route manifest that maps route IDs to route metadata. This can be used to drive a custom routing layer in front of your React Router request handlers
|
||||
|
||||
[react-router-config]: https://api.reactrouter.com/v7/types/_react-router_dev.config.Config.html
|
||||
[server-bundles-function]: https://api.reactrouter.com/v7/types/_react-router_dev.config.ServerBundlesFunction.html
|
||||
Reference in New Issue
Block a user