@@ -25,6 +25,7 @@ import { TaskError } from "../codemod/utils/task";
25
25
import { transpile as convertFileToJS } from "./useJavascript" ;
26
26
import { warnOnce } from "../warnOnce" ;
27
27
import type { Options } from "../compiler/options" ;
28
+ import { getAppDependencies } from "../dependencies" ;
28
29
29
30
export async function create ( {
30
31
appTemplate,
@@ -175,9 +176,13 @@ export async function build(
175
176
sourcemap,
176
177
onWarning : warnOnce ,
177
178
} ;
178
- if ( config . future . unstable_dev ) {
179
- let dev = await resolveDev ( config . future . unstable_dev ) ;
180
- options . devHttpOrigin = dev . httpOrigin ;
179
+ if ( mode === "development" && config . future . unstable_dev ) {
180
+ let dev = await resolveDevBuild ( config ) ;
181
+ options . devHttpOrigin = {
182
+ scheme : dev . httpScheme ,
183
+ host : dev . httpHost ,
184
+ port : dev . httpPort ,
185
+ } ;
181
186
options . devWebsocketPort = dev . websocketPort ;
182
187
}
183
188
@@ -237,8 +242,7 @@ export async function dev(
237
242
return await new Promise ( ( ) => { } ) ;
238
243
}
239
244
240
- let { unstable_dev } = config . future ;
241
- await devServer_unstable . serve ( config , await resolveDev ( unstable_dev , flags ) ) ;
245
+ await devServer_unstable . serve ( config , await resolveDevServe ( config , flags ) ) ;
242
246
}
243
247
244
248
export async function codemod (
@@ -467,49 +471,95 @@ let parseMode = (
467
471
468
472
let findPort = async ( ) => getPort ( { port : makeRange ( 3001 , 3100 ) } ) ;
469
473
470
- let resolveDev = async (
471
- dev : Exclude < RemixConfig [ "future" ] [ "unstable_dev" ] , false > ,
472
- flags : {
473
- command ?: string ;
474
- httpScheme ?: string ;
475
- httpHost ?: string ;
476
- httpPort ?: number ;
477
- restart ?: boolean ;
478
- websocketPort ?: number ;
479
- } = { }
480
- ) : Promise < {
481
- command ?: string ;
482
- httpOrigin : {
483
- scheme : string ;
484
- host : string ;
485
- port : number ;
486
- } ;
487
- restart : boolean ;
474
+ type DevBuildFlags = {
475
+ httpScheme : string ;
476
+ httpHost : string ;
477
+ httpPort : number ;
488
478
websocketPort : number ;
489
- } > => {
490
- let command = flags . command ?? ( dev === true ? undefined : dev . command ) ;
479
+ } ;
480
+ let resolveDevBuild = async (
481
+ config : RemixConfig ,
482
+ flags : Partial < DevBuildFlags > = { }
483
+ ) : Promise < DevBuildFlags > => {
484
+ let dev = config . future . unstable_dev ;
485
+ if ( dev === false ) throw Error ( "This should never happen" ) ;
486
+
487
+ // prettier-ignore
491
488
let httpScheme =
492
- flags . httpScheme ?? ( dev === true ? undefined : dev . httpScheme ) ?? "http" ;
489
+ flags . httpScheme ??
490
+ ( dev === true ? undefined : dev . httpScheme ) ??
491
+ "http" ;
492
+ // prettier-ignore
493
493
let httpHost =
494
- flags . httpHost ?? ( dev === true ? undefined : dev . httpHost ) ?? "localhost" ;
494
+ flags . httpHost ??
495
+ ( dev === true ? undefined : dev . httpHost ) ??
496
+ "localhost" ;
497
+ // prettier-ignore
495
498
let httpPort =
496
499
flags . httpPort ??
497
500
( dev === true ? undefined : dev . httpPort ) ??
498
501
( await findPort ( ) ) ;
502
+ // prettier-ignore
499
503
let websocketPort =
500
504
flags . websocketPort ??
501
505
( dev === true ? undefined : dev . websocketPort ) ??
502
506
( await findPort ( ) ) ;
507
+
508
+ return {
509
+ httpScheme,
510
+ httpHost,
511
+ httpPort,
512
+ websocketPort,
513
+ } ;
514
+ } ;
515
+
516
+ type DevServeFlags = DevBuildFlags & {
517
+ command : string ;
518
+ restart : boolean ;
519
+ } ;
520
+ let resolveDevServe = async (
521
+ config : RemixConfig ,
522
+ flags : Partial < DevServeFlags > = { }
523
+ ) : Promise < DevServeFlags > => {
524
+ let dev = config . future . unstable_dev ;
525
+ if ( dev === false ) throw Error ( "Cannot resolve dev options" ) ;
526
+
527
+ let { httpScheme, httpHost, httpPort, websocketPort } = await resolveDevBuild (
528
+ config ,
529
+ flags
530
+ ) ;
531
+
532
+ // prettier-ignore
533
+ let command =
534
+ flags . command ??
535
+ ( dev === true ? undefined : dev . command )
536
+ if ( ! command ) {
537
+ command = `remix-serve ${ path . relative (
538
+ process . cwd ( ) ,
539
+ config . serverBuildPath
540
+ ) } `;
541
+
542
+ let usingRemixAppServer =
543
+ getAppDependencies ( config ) [ "@remix-run/serve" ] !== undefined ;
544
+ if ( ! usingRemixAppServer ) {
545
+ console . error (
546
+ [
547
+ `Remix dev server command defaulted to '${ command } ', but @remix-run/serve is not installed.` ,
548
+ "If you are using another server, specify how to run it with `-c` or `--command` flag." ,
549
+ "For example, `remix dev -c 'node ./server.js'`" ,
550
+ ] . join ( "\n" )
551
+ ) ;
552
+ process . exit ( 1 ) ;
553
+ }
554
+ }
503
555
let restart =
504
556
flags . restart ?? ( dev === true ? undefined : dev . restart ) ?? true ;
505
557
506
558
return {
507
559
command,
508
- httpOrigin : {
509
- scheme : httpScheme ,
510
- host : httpHost ,
511
- port : httpPort ,
512
- } ,
560
+ httpScheme,
561
+ httpHost,
562
+ httpPort,
513
563
websocketPort,
514
564
restart,
515
565
} ;
0 commit comments