@@ -456,7 +456,7 @@ cli.command(
456456 async ( args ) => {
457457 const { entry, theme } = args
458458 const { exportSlides, getExportOptions } = await import ( './commands/export' )
459- const port = await getPort ( 12445 )
459+ const candidatePort = await getPort ( 12445 )
460460
461461 let warned = false
462462 for ( const entryFile of entry as unknown as string ) {
@@ -471,21 +471,27 @@ cli.command(
471471 )
472472 }
473473
474- const server = await createServer (
475- options ,
476- {
477- server : { port } ,
478- clearScreen : false ,
479- } ,
480- )
481- await server . listen ( port )
482- printInfo ( options )
483- const result = await exportSlides ( {
484- port,
485- ...getExportOptions ( { ...args , entry : entryFile } , options ) ,
486- } )
487- console . log ( `${ green ( ' ✓ ' ) } ${ dim ( 'exported to ' ) } ${ result } \n` )
488- server . close ( )
474+ let server : ViteDevServer | undefined
475+ try {
476+ server = await createServer (
477+ options ,
478+ {
479+ server : { port : candidatePort } ,
480+ clearScreen : false ,
481+ } ,
482+ )
483+ await server . listen ( candidatePort )
484+ const port = getViteServerPort ( server )
485+ printInfo ( options )
486+ const result = await exportSlides ( {
487+ port,
488+ ...getExportOptions ( { ...args , entry : entryFile } , options ) ,
489+ } )
490+ console . log ( `${ green ( ' ✓ ' ) } ${ dim ( 'exported to ' ) } ${ result } \n` )
491+ }
492+ finally {
493+ await server ?. close ( )
494+ }
489495 }
490496
491497 process . exit ( 0 )
@@ -524,30 +530,35 @@ cli.command(
524530 wait,
525531 } ) => {
526532 const { exportNotes } = await import ( './commands/export' )
527- const port = await getPort ( 12445 )
533+ const candidatePort = await getPort ( 12445 )
528534
529535 for ( const entryFile of entry as unknown as string [ ] ) {
530536 const options = await resolveOptions ( { entry : entryFile } , 'export' )
531- const server = await createServer (
532- options ,
533- {
534- server : { port } ,
535- clearScreen : false ,
536- } ,
537- )
538- await server . listen ( port )
539-
540- printInfo ( options )
541-
542- const result = await exportNotes ( {
543- port,
544- output : output || ( options . data . config . exportFilename ? `${ options . data . config . exportFilename } -notes` : `${ path . basename ( entryFile , '.md' ) } -export-notes` ) ,
545- timeout,
546- wait,
547- } )
548- console . log ( `${ green ( ' ✓ ' ) } ${ dim ( 'exported to ' ) } ${ result } \n` )
549-
550- server . close ( )
537+ let server : ViteDevServer | undefined
538+ try {
539+ server = await createServer (
540+ options ,
541+ {
542+ server : { port : candidatePort } ,
543+ clearScreen : false ,
544+ } ,
545+ )
546+ await server . listen ( candidatePort )
547+ const port = getViteServerPort ( server )
548+
549+ printInfo ( options )
550+
551+ const result = await exportNotes ( {
552+ port,
553+ output : output || ( options . data . config . exportFilename ? `${ options . data . config . exportFilename } -notes` : `${ path . basename ( entryFile , '.md' ) } -export-notes` ) ,
554+ timeout,
555+ wait,
556+ } )
557+ console . log ( `${ green ( ' ✓ ' ) } ${ dim ( 'exported to ' ) } ${ result } \n` )
558+ }
559+ finally {
560+ await server ?. close ( )
561+ }
551562 }
552563
553564 process . exit ( 0 )
558569 . help ( )
559570 . parse ( )
560571
572+ function getViteServerPort ( server : ViteDevServer ) : number {
573+ const address = server . httpServer ?. address ( )
574+ if ( address && typeof address === 'object' )
575+ return address . port
576+ throw new Error ( 'Failed to get Vite server port' )
577+ }
578+
561579function commonOptions ( args : Argv < object > ) {
562580 return args
563581 . positional ( 'entry' , {
0 commit comments