1
1
import {
2
2
readdirSync ,
3
- readFileSync ,
3
+ readFileSync , writeFileSync ,
4
4
} from 'fs' ;
5
5
import minifier from 'html-minifier' ;
6
6
import { Configuration } from './configuration.js' ;
7
7
import writeIndexHtml from "./write-index-html.js" ;
8
8
import {
9
9
minify ,
10
10
} from '@putout/minify' ;
11
+ import {
12
+ createHash ,
13
+ } from 'crypto' ;
11
14
12
15
export default ( cwd : string , configuration : Configuration ) => {
13
16
const template = ( ( ) => {
@@ -46,6 +49,9 @@ export default (cwd: string, configuration: Configuration) => {
46
49
prefetch.setAttribute('as', as);
47
50
header.appendChild(prefetch);
48
51
};` ;
52
+ const name = createHash ( 'sha256' )
53
+ . update ( JSON . stringify ( jsFiles ) + JSON . stringify ( cssFiles ) )
54
+ . digest ( 'hex' ) ;
49
55
if ( jsFiles . length > 0 && cssFiles . length > 0 ) {
50
56
const script = `window.setTimeout(() => {
51
57
${ func }
@@ -56,7 +62,12 @@ export default (cwd: string, configuration: Configuration) => {
56
62
append('application/javascript', 'script', js);
57
63
}
58
64
}, ${ configuration . fileBuilder . preloadStartDelay } );` ;
59
- return `<script type="text/javascript">${ minify ( script ) } </script>` ;
65
+ writeFileSync (
66
+ `${ cwd } /${ configuration . fileFinder . distJSRoot } /irfbr-${ name } .js` ,
67
+ minify ( script ) ,
68
+ 'utf8'
69
+ ) ;
70
+ return `<script type="text/javascript" src="/${ configuration . fileFinder . distJSRoot } /irfbr-${ name } .js"></script>` ;
60
71
}
61
72
if ( cssFiles . length > 0 ) {
62
73
const script = `window.setTimeout(() => {
@@ -65,7 +76,12 @@ export default (cwd: string, configuration: Configuration) => {
65
76
append('text/css', 'style', css);
66
77
}
67
78
}, ${ configuration . fileBuilder . preloadStartDelay } );` ;
68
- return `<script type="text/javascript">${ minify ( script ) } </script>` ;
79
+ writeFileSync (
80
+ `${ cwd } /${ configuration . fileFinder . distJSRoot } /irfbr-${ name } .js` ,
81
+ minify ( script ) ,
82
+ 'utf8'
83
+ ) ;
84
+ return `<script type="text/javascript" src="/${ configuration . fileFinder . distJSRoot } /irfbr-${ name } .js"></script>` ;
69
85
}
70
86
if ( jsFiles . length > 0 ) {
71
87
const script = `window.setTimeout(() => {
@@ -74,7 +90,12 @@ export default (cwd: string, configuration: Configuration) => {
74
90
append('application/javascript', 'script', js);
75
91
}
76
92
}, ${ configuration . fileBuilder . preloadStartDelay } );` ;
77
- return `<script type="text/javascript">${ minify ( script ) } </script>` ;
93
+ writeFileSync (
94
+ `${ cwd } /${ configuration . fileFinder . distJSRoot } /irfbr-${ name } .js` ,
95
+ minify ( script ) ,
96
+ 'utf8'
97
+ ) ;
98
+ return `<script type="text/javascript" src="/${ configuration . fileFinder . distJSRoot } /irfbr-${ name } .js"></script>` ;
78
99
}
79
100
return '' ;
80
101
} ) ( ) ;
0 commit comments