9
9
10
10
process . env . NODE_ENV = 'production' ;
11
11
12
+ var chalk = require ( 'chalk' ) ;
12
13
var fs = require ( 'fs' ) ;
14
+ var path = require ( 'path' ) ;
13
15
var filesize = require ( 'filesize' ) ;
14
- var gzipSize = require ( 'gzip-size' ) ;
16
+ var gzipSize = require ( 'gzip-size' ) . sync ;
15
17
var rimrafSync = require ( 'rimraf' ) . sync ;
16
18
var webpack = require ( 'webpack' ) ;
17
19
var config = require ( '../config/webpack.config.prod' ) ;
@@ -21,28 +23,41 @@ var paths = require('../config/paths');
21
23
// if you're in it, you don't end up in Trash
22
24
rimrafSync ( paths . appBuild + '/*' ) ;
23
25
24
- function logBuildSize ( assets , extension ) {
25
- for ( var i = 0 ; i < assets . length ; i ++ ) {
26
- var asset = assets [ i ] ;
27
- if ( asset . name . endsWith ( '.' + extension ) ) {
28
- var fileContents = fs . readFileSync ( paths . appBuild + '/' + asset . name ) ;
29
- console . log ( 'Size (gzipped) of ' + asset . name + ': ' + filesize ( gzipSize . sync ( fileContents ) ) ) ;
30
- }
31
- }
32
- }
33
-
26
+ console . log ( 'Creating an optimized production build...' ) ;
34
27
webpack ( config ) . run ( function ( err , stats ) {
35
28
if ( err ) {
36
29
console . error ( 'Failed to create a production build. Reason:' ) ;
37
30
console . error ( err . message || err ) ;
38
31
process . exit ( 1 ) ;
39
32
}
40
33
34
+ console . log ( chalk . green ( 'Compiled successfully.' ) ) ;
35
+ console . log ( ) ;
36
+
37
+ console . log ( 'File sizes after gzip:' ) ;
38
+ console . log ( ) ;
39
+ var assets = stats . toJson ( ) . assets
40
+ . filter ( asset => / \. ( j s | c s s ) $ / . test ( asset . name ) )
41
+ . map ( asset => {
42
+ var fileContents = fs . readFileSync ( paths . appBuild + '/' + asset . name ) ;
43
+ return {
44
+ name : asset . name ,
45
+ size : gzipSize ( fileContents )
46
+ } ;
47
+ } ) ;
48
+ assets . sort ( ( a , b ) => b . size - a . size ) ;
49
+ assets . forEach ( asset => {
50
+ console . log (
51
+ ' ' + chalk . dim ( 'build' + path . sep ) + chalk . cyan ( asset . name ) + ': ' +
52
+ chalk . green ( filesize ( asset . size ) )
53
+ ) ;
54
+ } ) ;
55
+ console . log ( ) ;
56
+
41
57
var openCommand = process . platform === 'win32' ? 'start' : 'open' ;
42
58
var homepagePath = require ( paths . appPackageJson ) . homepage ;
43
- console . log ( 'Successfully generated a bundle in the build folder!' ) ;
44
59
if ( homepagePath ) {
45
- console . log ( 'You can now deploy it to ' + homepagePath + '.' ) ;
60
+ console . log ( 'You can now publish them at ' + homepagePath + '.' ) ;
46
61
console . log ( 'For example, if you use GitHub Pages:' ) ;
47
62
console . log ( ) ;
48
63
console . log ( ' git commit -am "Save local changes"' ) ;
@@ -54,16 +69,13 @@ webpack(config).run(function(err, stats) {
54
69
console . log ( ' git checkout -' ) ;
55
70
console . log ( ) ;
56
71
} else {
57
- console . log ( 'You can now serve it with any static server.' ) ;
72
+ console . log ( 'You can now serve them with any static server.' ) ;
58
73
console . log ( 'For example:' ) ;
59
74
console . log ( ) ;
60
75
console . log ( ' npm install -g pushstate-server' ) ;
61
76
console . log ( ' pushstate-server build' ) ;
62
77
console . log ( ' ' + openCommand + ' http://localhost:9000' ) ;
63
78
console . log ( ) ;
64
- var assets = stats . toJson ( ) [ 'assets' ] ;
65
- logBuildSize ( assets , 'js' ) ;
66
- logBuildSize ( assets , 'css' ) ;
67
79
}
68
- console . log ( 'The bundle is optimized and ready to be deployed to production.' ) ;
80
+ console . log ( ) ;
69
81
} ) ;
0 commit comments