@@ -4,6 +4,9 @@ import { groupEntrypoints } from './groupEntrypoints';
4
4
import * as plugins from '../vite-plugins' ;
5
5
import { removeEmptyDirs } from './removeEmptyDirs' ;
6
6
import { getEntrypointBundlePath } from './entrypoints' ;
7
+ import glob from 'fast-glob' ;
8
+ import fs from 'fs-extra' ;
9
+ import { dirname , resolve } from 'path' ;
7
10
8
11
export async function buildEntrypoints (
9
12
entrypoints : Entrypoint [ ] ,
@@ -18,6 +21,8 @@ export async function buildEntrypoints(
18
21
: await buildSingleEntrypoint ( group , config ) ;
19
22
outputs . push ( output ) ;
20
23
}
24
+ const publicOutput = await copyPublicDirectory ( config ) ;
25
+ outputs . push ( publicOutput ) ;
21
26
22
27
// Remove any empty directories from moving outputs around
23
28
await removeEmptyDirs ( config . outDir ) ;
@@ -105,3 +110,28 @@ function getBuildOutput(
105
110
if ( Array . isArray ( result ) ) return result . flatMap ( ( { output } ) => output ) ;
106
111
return result . output ;
107
112
}
113
+
114
+ async function copyPublicDirectory (
115
+ config : InternalConfig ,
116
+ ) : Promise < BuildOutput > {
117
+ if ( ! ( await fs . exists ( config . publicDir ) ) ) return [ ] ;
118
+
119
+ const files = await glob ( '**/*' , { cwd : config . publicDir } ) ;
120
+
121
+ const outputs : BuildOutput = [ ] ;
122
+ for ( const file of files ) {
123
+ const srcPath = resolve ( config . publicDir , file ) ;
124
+ const outPath = resolve ( config . outDir , file ) ;
125
+
126
+ await fs . ensureDir ( dirname ( outPath ) ) ;
127
+ await fs . copyFile ( srcPath , outPath ) ;
128
+ outputs . push ( {
129
+ type : 'asset' ,
130
+ fileName : file ,
131
+ name : file ,
132
+ needsCodeReference : false ,
133
+ source : await fs . readFile ( srcPath ) ,
134
+ } ) ;
135
+ }
136
+ return outputs ;
137
+ }
0 commit comments