@@ -24,20 +24,6 @@ function relativePath(file1, file2) {
24
24
return '' ;
25
25
}
26
26
27
- function reportFacility ( grunt , options ) {
28
- var reporter ;
29
- switch ( options . report ) {
30
- case 'none' :
31
- reporter = grunt . verbose ;
32
- break ;
33
- default :
34
- case 'min' :
35
- case 'gzip' :
36
- reporter = grunt . log ;
37
- }
38
- return reporter ;
39
- }
40
-
41
27
// Converts \r\n to \n
42
28
function normalizeLf ( string ) {
43
29
return string . replace ( / \r \n / g, '\n' ) ;
@@ -47,6 +33,16 @@ module.exports = function(grunt) {
47
33
// Internal lib.
48
34
var uglify = require ( './lib/uglify' ) . init ( grunt ) ;
49
35
36
+ var getAvailableFiles = function ( filesArray ) {
37
+ return filesArray . filter ( function ( filepath ) {
38
+ if ( ! grunt . file . exists ( filepath ) ) {
39
+ grunt . log . warn ( 'Source file ' + chalk . cyan ( filepath ) + ' not found' ) ;
40
+ return false ;
41
+ }
42
+ return true ;
43
+ } ) ;
44
+ } ;
45
+
50
46
grunt . registerMultiTask ( 'uglify' , 'Minify files with UglifyJS.' , function ( ) {
51
47
// Merge task-specific and/or target-specific options with these defaults.
52
48
var options = this . options ( {
@@ -64,25 +60,23 @@ module.exports = function(grunt) {
64
60
screwIE8 : true ,
65
61
quoteStyle : 0
66
62
} ) ;
67
- var log = reportFacility ( grunt , options ) ;
68
63
69
64
var footer = normalizeLf ( options . footer ) ;
70
65
var mapNameGenerator , mapInNameGenerator ;
71
- var createdFiles = 0 ;
72
- var createdMaps = 0 ;
66
+ var created = {
67
+ maps : 0 ,
68
+ files : 0
69
+ } ;
70
+ var size = {
71
+ before : 0 ,
72
+ after : 0
73
+ } ;
73
74
74
75
// Iterate over all src-dest file pairs.
75
76
this . files . forEach ( function ( f ) {
76
- var src = f . src . filter ( function ( filepath ) {
77
- // Warn on and remove invalid source files (if nonull was set).
78
- if ( ! grunt . file . exists ( filepath ) ) {
79
- grunt . log . warn ( 'Source file ' + chalk . cyan ( filepath ) + ' not found.' ) ;
80
- return false ;
81
- }
82
- return true ;
83
- } ) ;
77
+ var availableFiles = getAvailableFiles ( f . src ) ;
84
78
85
- if ( src . length === 0 ) {
79
+ if ( availableFiles . length === 0 ) {
86
80
grunt . log . warn ( 'Destination ' + chalk . cyan ( f . dest ) + ' not written because src files were empty.' ) ;
87
81
return ;
88
82
}
@@ -101,7 +95,7 @@ module.exports = function(grunt) {
101
95
102
96
// function to get the name of the sourceMapIn file
103
97
if ( typeof options . sourceMapIn === 'function' ) {
104
- if ( src . length !== 1 ) {
98
+ if ( availableFiles . length !== 1 ) {
105
99
grunt . fail . warn ( 'Cannot generate `sourceMapIn` for multiple source files.' ) ;
106
100
}
107
101
mapInNameGenerator = options . sourceMapIn ;
@@ -126,7 +120,7 @@ module.exports = function(grunt) {
126
120
// Dynamically create incoming sourcemap names
127
121
if ( mapInNameGenerator ) {
128
122
try {
129
- options . sourceMapIn = mapInNameGenerator ( src [ 0 ] ) ;
123
+ options . sourceMapIn = mapInNameGenerator ( availableFiles [ 0 ] ) ;
130
124
} catch ( e ) {
131
125
err = new Error ( 'SourceMapInName failed.' ) ;
132
126
err . origError = e ;
@@ -151,46 +145,53 @@ module.exports = function(grunt) {
151
145
// Minify files, warn and fail on error.
152
146
var result ;
153
147
try {
154
- result = uglify . minify ( src , f . dest , options ) ;
148
+ result = uglify . minify ( availableFiles , f . dest , options ) ;
155
149
} catch ( e ) {
156
150
console . log ( e ) ;
157
151
err = new Error ( 'Uglification failed.' ) ;
158
152
if ( e . message ) {
159
153
err . message += '\n' + e . message + '. \n' ;
160
154
if ( e . line ) {
161
- err . message += 'Line ' + e . line + ' in ' + src + '\n' ;
155
+ err . message += 'Line ' + e . line + ' in ' + availableFiles + '\n' ;
162
156
}
163
157
}
164
158
err . origError = e ;
165
- grunt . log . warn ( 'Uglifying source ' + chalk . cyan ( src ) + ' failed.' ) ;
159
+ grunt . log . warn ( 'Uglifying source ' + chalk . cyan ( availableFiles ) + ' failed.' ) ;
166
160
grunt . fail . warn ( err ) ;
167
161
}
168
162
169
163
// Concat minified source + footer
170
164
var output = result . min + footer ;
171
165
166
+ var unCompiledJSString = availableFiles . map ( function ( file ) {
167
+ return grunt . file . read ( file ) ;
168
+ } ) . join ( '' ) ;
169
+
172
170
// Write the destination file.
173
171
grunt . file . write ( f . dest , output ) ;
174
172
173
+ size . before += unCompiledJSString . length ;
174
+
175
175
// Write source map
176
176
if ( options . sourceMap ) {
177
177
grunt . file . write ( options . generatedSourceMapName , result . sourceMap ) ;
178
- log . writeln ( 'File ' + chalk . cyan ( options . generatedSourceMapName ) + ' created (source map).' ) ;
179
- createdMaps ++ ;
178
+ grunt . verbose . writeln ( 'File ' + chalk . cyan ( options . generatedSourceMapName ) + ' created (source map).' ) ;
179
+ created . maps ++ ;
180
180
}
181
181
182
182
var outputSize = maxmin ( result . max , output , options . report === 'gzip' ) ;
183
- log . writeln ( 'File ' + chalk . cyan ( f . dest ) + ' created: ' + outputSize ) ;
183
+ grunt . verbose . writeln ( 'File ' + chalk . cyan ( f . dest ) + ' created: ' + chalk . dim ( outputSize ) ) ;
184
184
185
- createdFiles ++ ;
185
+ created . files ++ ;
186
+ size . after += output . length ;
186
187
} ) ;
187
188
188
- if ( createdMaps > 0 ) {
189
- grunt . log . ok ( createdMaps + ' source' + grunt . util . pluralize ( createdMaps , 'map/maps' ) + ' created.' ) ;
189
+ if ( created . maps > 0 ) {
190
+ grunt . log . ok ( created . maps + ' source' + grunt . util . pluralize ( created . maps , 'map/maps' ) + ' created.' ) ;
190
191
}
191
192
192
- if ( createdFiles > 0 ) {
193
- grunt . log . ok ( createdFiles + ' ' + grunt . util . pluralize ( this . files . length , 'file/files' ) + ' created.' ) ;
193
+ if ( created . files > 0 ) {
194
+ grunt . log . ok ( created . files + ' ' + grunt . util . pluralize ( this . files . length , 'file/files' ) + ' created ' + chalk . dim ( maxmin ( size . before , size . after ) ) ) ;
194
195
} else {
195
196
grunt . log . warn ( 'No files created.' ) ;
196
197
}
0 commit comments