55// The scripts are consumed as classic <script src> tags, so every js entry is
66// built as a self-contained IIFE in its own vite pass (rollup cannot code-split
77// iife output, which is exactly what we want here).
8- import { build } from 'vite'
9- import { copyFileSync , cpSync , createWriteStream , mkdirSync , readdirSync , rmSync } from 'node:fs'
10- import { resolve , basename } from 'node:path'
11- import { ZipArchive } from 'archiver'
8+ import { build } from 'vite' ;
9+ import { copyFileSync , cpSync , createWriteStream , mkdirSync , readdirSync , rmSync } from 'node:fs' ;
10+ import { resolve , basename } from 'node:path' ;
11+ import { ZipArchive } from 'archiver' ;
1212
13- const root = import . meta. dirname
14- const src = resolve ( root , 'src' )
15- const staged = resolve ( root , 'build/ui' )
13+ const root = import . meta. dirname ;
14+ const src = resolve ( root , 'src' ) ;
15+ const staged = resolve ( root , 'build/ui' ) ;
1616
1717// js/site.js is the concatenation of the numbered scripts, in order. They are
1818// self-contained IIFEs, so a virtual entry with side-effect imports preserves
1919// the behaviour.
2020const siteScripts = readdirSync ( resolve ( src , 'js' ) )
2121 . filter ( ( name ) => / ^ \d + - .+ \. j s $ / . test ( name ) )
22- . sort ( )
23- const virtualSiteId = 'virtual:site.js'
22+ . sort ( ) ;
23+ const virtualSiteId = 'virtual:site.js' ;
2424
2525// Every js/vendor/*.bundle.js becomes js/vendor/<name>.js with its CommonJS
2626// requires bundled in (this replaces browserify).
@@ -30,11 +30,11 @@ const jsEntries = [
3030 . filter ( ( name ) => name . endsWith ( '.bundle.js' ) )
3131 . map ( ( name ) => ( {
3232 name : `vendor/${ basename ( name , '.bundle.js' ) } ` ,
33- input : resolve ( src , 'js' , 'vendor' , name ) ,
34- } ) ) ,
35- ]
33+ input : resolve ( src , 'js' , 'vendor' , name )
34+ } ) )
35+ ] ;
3636
37- function config ( overrides ) {
37+ function config ( overrides ) {
3838 return {
3939 configFile : false ,
4040 root,
@@ -49,71 +49,75 @@ function config (overrides) {
4949 load : ( id ) =>
5050 id === virtualSiteId
5151 ? siteScripts . map ( ( name ) => `import '${ resolve ( src , 'js' , name ) } '` ) . join ( '\n' )
52- : undefined ,
53- } ,
52+ : undefined
53+ }
5454 ] ,
55- ...overrides ,
56- }
55+ ...overrides
56+ } ;
5757}
5858
59- rmSync ( resolve ( root , 'build' ) , { recursive : true , force : true } )
59+ rmSync ( resolve ( root , 'build' ) , { recursive : true , force : true } ) ;
6060
6161for ( const entry of jsEntries ) {
62- await build ( config ( {
62+ await build (
63+ config ( {
64+ build : {
65+ outDir : staged ,
66+ emptyOutDir : false ,
67+ rollupOptions : {
68+ input : entry . input ,
69+ output : {
70+ format : 'iife' ,
71+ entryFileNames : `js/${ entry . name } .js` ,
72+ inlineDynamicImports : true
73+ }
74+ }
75+ }
76+ } )
77+ ) ;
78+ }
79+
80+ await build (
81+ config ( {
6382 build : {
6483 outDir : staged ,
6584 emptyOutDir : false ,
85+ assetsInlineLimit : 0 ,
6686 rollupOptions : {
67- input : entry . input ,
87+ input : resolve ( src , 'css' , 'site.css' ) ,
6888 output : {
69- format : 'iife' ,
70- entryFileNames : `js/${ entry . name } .js` ,
71- inlineDynamicImports : true ,
72- } ,
73- } ,
74- } ,
75- } ) )
76- }
77-
78- await build ( config ( {
79- build : {
80- outDir : staged ,
81- emptyOutDir : false ,
82- assetsInlineLimit : 0 ,
83- rollupOptions : {
84- input : resolve ( src , 'css' , 'site.css' ) ,
85- output : {
86- assetFileNames : ( asset ) => {
87- const name = asset . names [ 0 ] ?? ''
88- if ( name === 'site.css' ) return 'css/site.css'
89- if ( / ^ f a - .+ \. ( w o f f 2 ? | t t f ) $ / . test ( name ) ) return 'webfonts/[name][extname]'
90- if ( / \. ( w o f f 2 ? | t t f ) $ / . test ( name ) ) return 'font/[name][extname]'
91- if ( / \. ( s v g | p n g | g i f | i c o | j p g ) $ / . test ( name ) ) return 'img/[name][extname]'
92- return 'css/[name][extname]'
93- } ,
94- } ,
95- } ,
96- } ,
97- } ) )
89+ assetFileNames : ( asset ) => {
90+ const name = asset . names [ 0 ] ?? '' ;
91+ if ( name === 'site.css' ) return 'css/site.css' ;
92+ if ( / ^ f a - .+ \. ( w o f f 2 ? | t t f ) $ / . test ( name ) ) return 'webfonts/[name][extname]' ;
93+ if ( / \. ( w o f f 2 ? | t t f ) $ / . test ( name ) ) return 'font/[name][extname]' ;
94+ if ( / \. ( s v g | p n g | g i f | i c o | j p g ) $ / . test ( name ) ) return 'img/[name][extname]' ;
95+ return 'css/[name][extname]' ;
96+ }
97+ }
98+ }
99+ }
100+ } )
101+ ) ;
98102
99103// webfonts/ ships as-is: the Font Awesome css references it with
100104// runtime-relative urls that vite cannot (and must not) rewrite
101105for ( const dir of [ 'helpers' , 'layouts' , 'partials' , 'img' , 'webfonts' ] ) {
102- cpSync ( resolve ( src , dir ) , resolve ( staged , dir ) , { recursive : true } )
106+ cpSync ( resolve ( src , dir ) , resolve ( staged , dir ) , { recursive : true } ) ;
103107}
104108for ( const file of [ 'NOTICE' , 'LICENSE' ] ) {
105- copyFileSync ( resolve ( root , file ) , resolve ( staged , file ) )
109+ copyFileSync ( resolve ( root , file ) , resolve ( staged , file ) ) ;
106110}
107111
108- const zipPath = resolve ( root , 'build/ui-bundle.zip' )
109- mkdirSync ( resolve ( root , 'build' ) , { recursive : true } )
112+ const zipPath = resolve ( root , 'build/ui-bundle.zip' ) ;
113+ mkdirSync ( resolve ( root , 'build' ) , { recursive : true } ) ;
110114await new Promise ( ( resolvePromise , reject ) => {
111- const output = createWriteStream ( zipPath )
112- const archive = new ZipArchive ( )
113- output . on ( 'close' , resolvePromise )
114- archive . on ( 'error' , reject )
115- archive . pipe ( output )
116- archive . directory ( staged , false )
117- archive . finalize ( )
118- } )
119- console . log ( `bundled ${ zipPath } ` )
115+ const output = createWriteStream ( zipPath ) ;
116+ const archive = new ZipArchive ( ) ;
117+ output . on ( 'close' , resolvePromise ) ;
118+ archive . on ( 'error' , reject ) ;
119+ archive . pipe ( output ) ;
120+ archive . directory ( staged , false ) ;
121+ archive . finalize ( ) ;
122+ } ) ;
123+ console . log ( `bundled ${ zipPath } ` ) ;
0 commit comments