@@ -51,7 +51,11 @@ import { ssrManifestPlugin } from './ssr/ssrManifestPlugin'
5151import  {  loadFallbackPlugin  }  from  './plugins/loadFallback' 
5252import  {  findNearestPackageData  }  from  './packages' 
5353import  type  {  PackageCache  }  from  './packages' 
54- import  {  resolveChokidarOptions  }  from  './watch' 
54+ import  { 
55+   getResolvedOutDirs , 
56+   resolveChokidarOptions , 
57+   resolveEmptyOutDir , 
58+ }  from  './watch' 
5559import  {  completeSystemWrapPlugin  }  from  './plugins/completeSystemWrap' 
5660import  {  mergeConfig  }  from  './publicUtils' 
5761import  {  webWorkerPostPlugin  }  from  './plugins/worker' 
@@ -655,7 +659,17 @@ export async function build(
655659      normalizedOutputs . push ( buildOutputOptions ( outputs ) ) 
656660    } 
657661
658-     const  outDirs  =  normalizedOutputs . map ( ( {  dir } )  =>  resolve ( dir ! ) ) 
662+     const  resolvedOutDirs  =  getResolvedOutDirs ( 
663+       config . root , 
664+       options . outDir , 
665+       options . rollupOptions ?. output , 
666+     ) 
667+     const  emptyOutDir  =  resolveEmptyOutDir ( 
668+       options . emptyOutDir , 
669+       config . root , 
670+       resolvedOutDirs , 
671+       config . logger , 
672+     ) 
659673
660674    // watch file changes with rollup 
661675    if  ( config . build . watch )  { 
@@ -664,6 +678,8 @@ export async function build(
664678      const  resolvedChokidarOptions  =  resolveChokidarOptions ( 
665679        config , 
666680        config . build . watch . chokidar , 
681+         resolvedOutDirs , 
682+         emptyOutDir , 
667683      ) 
668684
669685      const  {  watch }  =  await  import ( 'rollup' ) 
@@ -680,7 +696,7 @@ export async function build(
680696        if  ( event . code  ===  'BUNDLE_START' )  { 
681697          config . logger . info ( colors . cyan ( `\nbuild started...` ) ) 
682698          if  ( options . write )  { 
683-             prepareOutDir ( outDirs ,   options . emptyOutDir ,  config ) 
699+             prepareOutDir ( resolvedOutDirs ,   emptyOutDir ,  config ) 
684700          } 
685701        }  else  if  ( event . code  ===  'BUNDLE_END' )  { 
686702          event . result . close ( ) 
@@ -699,7 +715,7 @@ export async function build(
699715    bundle  =  await  rollup ( rollupOptions ) 
700716
701717    if  ( options . write )  { 
702-       prepareOutDir ( outDirs ,   options . emptyOutDir ,  config ) 
718+       prepareOutDir ( resolvedOutDirs ,   emptyOutDir ,  config ) 
703719    } 
704720
705721    const  res : RollupOutput [ ]  =  [ ] 
@@ -726,36 +742,15 @@ export async function build(
726742} 
727743
728744function  prepareOutDir ( 
729-   outDirs : string [ ] , 
745+   outDirs : Set < string > , 
730746  emptyOutDir : boolean  |  null , 
731747  config : ResolvedConfig , 
732748)  { 
733-   const  nonDuplicateDirs  =  new  Set ( outDirs ) 
734-   let  outside  =  false 
735-   if  ( emptyOutDir  ==  null )  { 
736-     for  ( const  outDir  of  nonDuplicateDirs )  { 
737-       if  ( 
738-         fs . existsSync ( outDir )  && 
739-         ! normalizePath ( outDir ) . startsWith ( withTrailingSlash ( config . root ) ) 
740-       )  { 
741-         // warn if outDir is outside of root 
742-         config . logger . warn ( 
743-           colors . yellow ( 
744-             `\n${ colors . bold ( `(!)` ) } ${ colors . white (  
745-               colors . dim ( outDir ) ,  
746-             ) }   is not inside project root and will not be emptied.\n`+ 
747-               `Use --emptyOutDir to override.\n` , 
748-           ) , 
749-         ) 
750-         outside  =  true 
751-         break 
752-       } 
753-     } 
754-   } 
755-   for  ( const  outDir  of  nonDuplicateDirs )  { 
756-     if  ( ! outside  &&  emptyOutDir  !==  false  &&  fs . existsSync ( outDir ) )  { 
749+   const  outDirsArray  =  [ ...outDirs ] 
750+   for  ( const  outDir  of  outDirs )  { 
751+     if  ( emptyOutDir  !==  false  &&  fs . existsSync ( outDir ) )  { 
757752      // skip those other outDirs which are nested in current outDir 
758-       const  skipDirs  =  outDirs 
753+       const  skipDirs  =  outDirsArray 
759754        . map ( ( dir )  =>  { 
760755          const  relative  =  path . relative ( outDir ,  dir ) 
761756          if  ( 
0 commit comments