@@ -90,47 +90,85 @@ const customServerFile = ({
90
90
port,
91
91
base,
92
92
basename,
93
+ templateName,
93
94
} : {
94
95
port : number ;
95
96
base ?: string ;
96
97
basename ?: string ;
98
+ templateName : TemplateName ;
97
99
} ) => {
98
100
base = base ?? "/mybase/" ;
99
101
basename = basename ?? base ;
100
102
101
- return js `
102
- import { createRequestHandler } from "@react-router/express";
103
- import express from "express";
104
-
105
- const viteDevServer =
106
- process.env.NODE_ENV === "production"
107
- ? undefined
108
- : await import("vite").then(({ createServer }) =>
109
- createServer({
110
- server: {
111
- middlewareMode: true,
112
- },
113
- })
114
- );
103
+ if ( templateName . includes ( "rsc" ) ) {
104
+ return js `
105
+ import { createRequestListener } from "@mjackson/node-fetch-server";
106
+ import express from "express";
107
+
108
+ const viteDevServer =
109
+ process.env.NODE_ENV === "production"
110
+ ? undefined
111
+ : await import("vite").then(({ createServer }) =>
112
+ createServer({
113
+ server: {
114
+ middlewareMode: true,
115
+ },
116
+ })
117
+ );
118
+
119
+ const app = express();
120
+ if (viteDevServer) {
121
+ app.use(viteDevServer.middlewares);
122
+ } else {
123
+ app.use("${ base } ", express.static("build/client"));
124
+ app.all(
125
+ "${ basename } *",
126
+ createRequestListener((await import("./build/server/index.js")).default),
127
+ );
128
+ }
129
+ app.get("*", (_req, res) => {
130
+ res.setHeader("content-type", "text/html")
131
+ res.end('React Router app is at <a href="${ basename } ">${ basename } </a>');
132
+ });
115
133
116
- const app = express();
117
- app.use("${ base } ", viteDevServer?.middlewares || express.static("build/client"));
118
- app.all(
119
- "${ basename } *",
120
- createRequestHandler({
121
- build: viteDevServer
122
- ? () => viteDevServer.ssrLoadModule("virtual:react-router/server-build")
123
- : await import("./build/server/index.js"),
124
- })
125
- );
126
- app.get("*", (_req, res) => {
127
- res.setHeader("content-type", "text/html")
128
- res.end('React Router app is at <a href="${ basename } ">${ basename } </a>');
129
- });
134
+ const port = ${ port } ;
135
+ app.listen(port, () => console.log('http://localhost:' + port));
136
+ ` ;
137
+ } else {
138
+ return js `
139
+ import { createRequestHandler } from "@react-router/express";
140
+ import express from "express";
141
+
142
+ const viteDevServer =
143
+ process.env.NODE_ENV === "production"
144
+ ? undefined
145
+ : await import("vite").then(({ createServer }) =>
146
+ createServer({
147
+ server: {
148
+ middlewareMode: true,
149
+ },
150
+ })
151
+ );
152
+
153
+ const app = express();
154
+ app.use("${ base } ", viteDevServer?.middlewares || express.static("build/client"));
155
+ app.all(
156
+ "${ basename } *",
157
+ createRequestHandler({
158
+ build: viteDevServer
159
+ ? () => viteDevServer.ssrLoadModule("virtual:react-router/server-build")
160
+ : await import("./build/server/index.js"),
161
+ })
162
+ );
163
+ app.get("*", (_req, res) => {
164
+ res.setHeader("content-type", "text/html")
165
+ res.end('React Router app is at <a href="${ basename } ">${ basename } </a>');
166
+ });
130
167
131
- const port = ${ port } ;
132
- app.listen(port, () => console.log('http://localhost:' + port));
133
- ` ;
168
+ const port = ${ port } ;
169
+ app.listen(port, () => console.log('http://localhost:' + port));
170
+ ` ;
171
+ }
134
172
} ;
135
173
136
174
test . describe ( "Vite base + React Router basename" , ( ) => {
@@ -279,11 +317,6 @@ test.describe("Vite base + React Router basename", () => {
279
317
} ) ;
280
318
281
319
test . describe ( "express dev" , async ( ) => {
282
- test . skip (
283
- templateName . includes ( "rsc" ) ,
284
- "RSC Framework Mode doesn't support Vite middleware mode yet" ,
285
- ) ;
286
-
287
320
let port : number ;
288
321
let cwd : string ;
289
322
let stop : ( ) => void ;
@@ -301,7 +334,7 @@ test.describe("Vite base + React Router basename", () => {
301
334
cwd = await createProject (
302
335
{
303
336
...( await configFiles ( { port, base, basename, templateName } ) ) ,
304
- "server.mjs" : customServerFile ( { port, basename } ) ,
337
+ "server.mjs" : customServerFile ( { port, basename, templateName } ) ,
305
338
...sharedFiles ,
306
339
} ,
307
340
templateName ,
@@ -408,11 +441,6 @@ test.describe("Vite base + React Router basename", () => {
408
441
} ) ;
409
442
410
443
test . describe ( "express build" , async ( ) => {
411
- test . skip (
412
- templateName . includes ( "rsc" ) ,
413
- "Vite build test is already using Express" ,
414
- ) ;
415
-
416
444
let port : number ;
417
445
let cwd : string ;
418
446
let stop : ( ) => void ;
@@ -434,6 +462,7 @@ test.describe("Vite base + React Router basename", () => {
434
462
port,
435
463
base,
436
464
basename,
465
+ templateName,
437
466
} ) ,
438
467
...sharedFiles ,
439
468
} ,
@@ -479,29 +508,46 @@ test.describe("Vite base + React Router basename", () => {
479
508
page,
480
509
} ) => {
481
510
port = await getPort ( ) ;
482
- cwd = await createProject ( {
483
- ...( await configFiles ( {
484
- templateName,
485
- port,
486
- base : "https://cdn.example.com/assets/" ,
487
- basename : "/app/" ,
488
- } ) ) ,
489
- // Slim server that only serves basename (route) requests from the React Router handler
490
- "server.mjs" : String . raw `
491
- import { createRequestHandler } from "@react-router/express";
492
- import express from "express";
493
-
494
- const app = express();
495
- app.all(
496
- "/app/*",
497
- createRequestHandler({ build: await import("./build/server/index.js") })
498
- );
499
-
500
- const port = ${ port } ;
501
- app.listen(port, () => console.log('http://localhost:' + port));
502
- ` ,
503
- ...sharedFiles ,
504
- } ) ;
511
+ cwd = await createProject (
512
+ {
513
+ ...( await configFiles ( {
514
+ templateName,
515
+ port,
516
+ base : "https://cdn.example.com/assets/" ,
517
+ basename : "/app/" ,
518
+ } ) ) ,
519
+ // Slim server that only serves basename (route) requests from the React Router handler
520
+ "server.mjs" : templateName . includes ( "rsc" )
521
+ ? String . raw `
522
+ import { createRequestListener } from "@mjackson/node-fetch-server";
523
+ import express from "express";
524
+
525
+ const app = express();
526
+ app.all(
527
+ "/app/*",
528
+ createRequestListener((await import("./build/server/index.js")).default)
529
+ );
530
+
531
+ const port = ${ port } ;
532
+ app.listen(port, () => console.log('http://localhost:' + port));
533
+ `
534
+ : String . raw `
535
+ import { createRequestHandler } from "@react-router/express";
536
+ import express from "express";
537
+
538
+ const app = express();
539
+ app.all(
540
+ "/app/*",
541
+ createRequestHandler({ build: await import("./build/server/index.js") })
542
+ );
543
+
544
+ const port = ${ port } ;
545
+ app.listen(port, () => console.log('http://localhost:' + port));
546
+ ` ,
547
+ ...sharedFiles ,
548
+ } ,
549
+ templateName ,
550
+ ) ;
505
551
506
552
build ( { cwd } ) ;
507
553
stop = await customDev ( {
0 commit comments