99
1010process . env . NODE_ENV = 'production' ;
1111
12+ var chalk = require ( 'chalk' ) ;
1213var fs = require ( 'fs' ) ;
14+ var path = require ( 'path' ) ;
1315var filesize = require ( 'filesize' ) ;
14- var gzipSize = require ( 'gzip-size' ) ;
16+ var gzipSize = require ( 'gzip-size' ) . sync ;
1517var rimrafSync = require ( 'rimraf' ) . sync ;
1618var webpack = require ( 'webpack' ) ;
1719var config = require ( '../config/webpack.config.prod' ) ;
@@ -21,28 +23,41 @@ var paths = require('../config/paths');
2123// if you're in it, you don't end up in Trash
2224rimrafSync ( paths . appBuild + '/*' ) ;
2325
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...' ) ;
3427webpack ( config ) . run ( function ( err , stats ) {
3528 if ( err ) {
3629 console . error ( 'Failed to create a production build. Reason:' ) ;
3730 console . error ( err . message || err ) ;
3831 process . exit ( 1 ) ;
3932 }
4033
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+
4157 var openCommand = process . platform === 'win32' ? 'start' : 'open' ;
4258 var homepagePath = require ( paths . appPackageJson ) . homepage ;
43- console . log ( 'Successfully generated a bundle in the build folder!' ) ;
4459 if ( homepagePath ) {
45- console . log ( 'You can now deploy it to ' + homepagePath + '.' ) ;
60+ console . log ( 'You can now publish them at ' + homepagePath + '.' ) ;
4661 console . log ( 'For example, if you use GitHub Pages:' ) ;
4762 console . log ( ) ;
4863 console . log ( ' git commit -am "Save local changes"' ) ;
@@ -54,16 +69,13 @@ webpack(config).run(function(err, stats) {
5469 console . log ( ' git checkout -' ) ;
5570 console . log ( ) ;
5671 } 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.' ) ;
5873 console . log ( 'For example:' ) ;
5974 console . log ( ) ;
6075 console . log ( ' npm install -g pushstate-server' ) ;
6176 console . log ( ' pushstate-server build' ) ;
6277 console . log ( ' ' + openCommand + ' http://localhost:9000' ) ;
6378 console . log ( ) ;
64- var assets = stats . toJson ( ) [ 'assets' ] ;
65- logBuildSize ( assets , 'js' ) ;
66- logBuildSize ( assets , 'css' ) ;
6779 }
68- console . log ( 'The bundle is optimized and ready to be deployed to production.' ) ;
80+ console . log ( ) ;
6981} ) ;
0 commit comments