11import minimist from 'minimist'
22import c from 'picocolors'
33import { createLogger , type Logger } from 'vite'
4- import { build , createServer , serve } from '.'
4+ import {
5+ build ,
6+ createServer ,
7+ disposeMdItInstance ,
8+ resolveConfig ,
9+ serve
10+ } from '.'
511import { version } from '../../package.json'
612import { init } from './init/init'
13+ import { clearCache } from './markdownToVue'
714import { bindShortcuts } from './shortcuts'
815
916if ( process . env . DEBUG ) {
@@ -40,30 +47,38 @@ if (!command || command === 'dev') {
4047 argv . optimizeDeps = { force : true }
4148 }
4249
50+ let config = await resolveConfig ( root , argv ) . catch (
51+ logErrorAndExit . bind ( null , `failed to resolve config. error:` )
52+ )
4353 const createDevServer = async ( isRestart = true ) => {
44- const server = await createServer ( root , argv , async ( ) => {
54+ const server = await createServer ( root , argv , restartServer , config )
55+ function restartServer ( ) {
4556 if ( ! restartPromise ) {
4657 restartPromise = ( async ( ) => {
58+ try {
59+ config = await resolveConfig ( root , argv )
60+ } catch ( err : any ) {
61+ logError ( `failed to resolve config. error:` , err )
62+ return
63+ }
64+ disposeMdItInstance ( )
65+ clearCache ( )
4766 await server . close ( )
4867 await createDevServer ( )
4968 } ) ( ) . finally ( ( ) => {
5069 restartPromise = undefined
5170 } )
5271 }
53-
5472 return restartPromise
55- } )
73+ }
5674 await server . listen ( undefined , isRestart )
5775 logVersion ( server . config . logger )
5876 server . printUrls ( )
59- bindShortcuts ( server , createDevServer )
77+ bindShortcuts ( server , restartServer )
6078 }
61- createDevServer ( false ) . catch ( ( err ) => {
62- createLogger ( ) . error (
63- `${ c . red ( `failed to start server. error:` ) } \n${ err . message } \n${ err . stack } `
64- )
65- process . exit ( 1 )
66- } )
79+ createDevServer ( false ) . catch (
80+ logErrorAndExit . bind ( null , `failed to start server. error:` )
81+ )
6782} else if ( command === 'init' ) {
6883 createLogger ( ) . info ( '' , { clear : true } )
6984 init ( argv . root )
@@ -74,21 +89,30 @@ if (!command || command === 'dev') {
7489 onAfterConfigResolve ( siteConfig ) {
7590 logVersion ( siteConfig . logger )
7691 }
77- } ) . catch ( ( err ) => {
78- createLogger ( ) . error (
79- `${ c . red ( `build error:` ) } \n${ err . message } \n${ err . stack } `
80- )
81- process . exit ( 1 )
82- } )
92+ } ) . catch ( logErrorAndExit . bind ( null , `build error:` ) )
8393 } else if ( command === 'serve' || command === 'preview' ) {
84- serve ( argv ) . catch ( ( err ) => {
85- createLogger ( ) . error (
86- `${ c . red ( `failed to start server. error:` ) } \n${ err . message } \n${ err . stack } `
87- )
88- process . exit ( 1 )
89- } )
94+ serve ( argv ) . catch (
95+ logErrorAndExit . bind ( null , `failed to start server. error:` )
96+ )
9097 } else {
91- createLogger ( ) . error ( c . red ( `unknown command "${ command } ".` ) )
92- process . exit ( 1 )
98+ logErrorAndExit ( `unknown command "${ command } ".` )
9399 }
94100}
101+
102+ function logErrorAndExit ( message : string , err ?: any ) : never {
103+ logError ( message , err )
104+ process . exit ( 1 )
105+ }
106+
107+ function logError ( message : string , err ?: any ) {
108+ const logger = createLogger ( )
109+ logger . error (
110+ [
111+ c . red ( message ) ,
112+ err && 'message' in err && err . message ,
113+ err && 'stack' in err && err . stack
114+ ]
115+ . filter ( Boolean )
116+ . join ( '\n' )
117+ )
118+ }
0 commit comments