@@ -2,46 +2,51 @@ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs'
2
2
import { join , parse as parsePath } from 'node:path'
3
3
import { HTMLRewriter } from 'html-rewriter-wasm'
4
4
5
- const imageFile = / \. ( ( p n g ) | ( j p g ) | ( s v g ) | ( w e b p ) | ( g i f ) ) $ /
5
+ const imageFileRE = / \. ( ( p n g ) | ( j p g ) | ( s v g ) | ( w e b p ) | ( g i f ) ) $ /
6
6
7
- export async function closeBundle ( ) {
8
- if ( ! this . resolvedConfig . build . ssr ) {
9
- const distDir = join ( this . root , this . resolvedConfig . build . outDir )
10
- const indexHtml = readFileSync ( join ( distDir , 'index.html' ) , 'utf8' )
11
- const pages = Object . fromEntries (
12
- Object . entries ( this . resolvedBundle ?? { } )
13
- . filter ( ( [ id , meta ] ) => {
14
- if ( meta . facadeModuleId ?. includes ( '/pages/' ) ) {
15
- meta . htmlPath = meta . facadeModuleId . replace ( / .* p a g e s \/ ( .* ) \. j s x $ / , 'html/$1.html' )
16
- return true
17
- }
18
- } )
19
- )
20
- for ( const page of Object . values ( pages ) ) {
21
- const jsImports = page . imports
22
- const cssImports = page . viteMetadata . importedCss
23
- const images = page . moduleIds . filter ( _ => imageFile . test ( _ ) )
24
- let imagePreloads = '\n'
25
- for ( let image of images ) {
26
- image = image . slice ( this . root . length + 1 )
27
- imagePreloads += ` <link rel="preload" as="image" crossorigin href="${ this . resolvedConfig . base } ${ image } ">\n`
28
- }
29
- let cssPreloads = ''
30
- for ( const css of cssImports ) {
31
- cssPreloads += ` <link rel="preload" as="style" crossorigin href="${ this . resolvedConfig . base } ${ css } ">\n`
32
- }
33
- let jsPreloads = ''
34
- for ( const js of jsImports ) {
35
- jsPreloads += ` <link rel="modulepreload" crossorigin href="${ this . resolvedConfig . base } ${ js } ">\n`
36
- }
37
- const pageHtml = await appendHead (
38
- indexHtml ,
39
- imagePreloads ,
40
- cssPreloads ,
41
- jsPreloads
42
- )
43
- writeHtml ( page , pageHtml , distDir )
7
+ export async function closeBundle ( resolvedBundle ) {
8
+ if ( this . environment . name !== 'client' ) {
9
+ return
10
+ }
11
+ const { assetsInlineLimit } = this . environment . config . build
12
+ const { root, base } = this . environment . config
13
+ const distDir = join ( root , this . environment . config . build . outDir )
14
+ const indexHtml = readFileSync ( join ( distDir , 'index.html' ) , 'utf8' )
15
+ const pages = Object . fromEntries (
16
+ Object . entries ( resolvedBundle ?? { } )
17
+ . filter ( ( [ id , meta ] ) => {
18
+ if ( meta . facadeModuleId ?. includes ( '/pages/' ) ) {
19
+ meta . htmlPath = meta . facadeModuleId . replace ( / .* p a g e s \/ ( .* ) \. j s x $ / , 'html/$1.html' )
20
+ return true
21
+ }
22
+ } )
23
+ )
24
+ for ( const page of Object . values ( pages ) ) {
25
+ const jsImports = page . imports
26
+ const cssImports = page . viteMetadata . importedCss
27
+ const images = page . moduleIds . filter ( ( img ) => {
28
+ return ( page . modules [ img ] . originalLength > assetsInlineLimit ) && imageFileRE . test ( img )
29
+ } )
30
+ let imagePreloads = '\n'
31
+ for ( let image of images ) {
32
+ image = image . slice ( root . length + 1 )
33
+ imagePreloads += ` <link rel="preload" as="image" crossorigin href="${ base } ${ image } ">\n`
34
+ }
35
+ let cssPreloads = ''
36
+ for ( const css of cssImports ) {
37
+ cssPreloads += ` <link rel="preload" as="style" crossorigin href="${ base } ${ css } ">\n`
44
38
}
39
+ let jsPreloads = ''
40
+ for ( const js of jsImports ) {
41
+ jsPreloads += ` <link rel="modulepreload" crossorigin href="${ base } ${ js } ">\n`
42
+ }
43
+ const pageHtml = await appendHead (
44
+ indexHtml ,
45
+ imagePreloads ,
46
+ cssPreloads ,
47
+ jsPreloads
48
+ )
49
+ writeHtml ( page , pageHtml , distDir )
45
50
}
46
51
}
47
52
0 commit comments