@@ -25,6 +25,7 @@ function cli(process, beforeMinifyCallback) {
25
25
program
26
26
. version ( buildVersion , '-v, --version' )
27
27
. usage ( '[options] <source-file ...>' )
28
+ . option ( '-b, --batch' , 'If enabled, optimizes input files one by one instead of joining them together' )
28
29
. option ( '-c, --compatibility [ie7|ie8]' , 'Force compatibility mode (see Readme for advanced examples)' )
29
30
. option ( '-d, --debug' , 'Shows debug information (minification time & compression efficiency)' )
30
31
. option ( '-f, --format <options>' , 'Controls output formatting, see examples below' )
@@ -136,6 +137,7 @@ function cli(process, beforeMinifyCallback) {
136
137
removeInlinedFiles = inputOptions . removeInlinedFiles ;
137
138
138
139
options = {
140
+ batch : inputOptions . batch ,
139
141
compatibility : inputOptions . compatibility ,
140
142
format : inputOptions . format ,
141
143
inline : typeof inputOptions . inline == 'string' ? inputOptions . inline : 'local' ,
@@ -232,41 +234,63 @@ function minify(process, options, configurations, data) {
232
234
applyNonBooleanCompatibilityFlags ( cleanCss , options . compatibility ) ;
233
235
configurations . beforeMinifyCallback ( cleanCss ) ;
234
236
cleanCss . minify ( data , getSourceMapContent ( configurations . inputSourceMap ) , function ( errors , minified ) {
235
- var mapFilename ;
236
-
237
- if ( configurations . debugMode ) {
238
- console . error ( 'Original: %d bytes' , minified . stats . originalSize ) ;
239
- console . error ( 'Minified: %d bytes' , minified . stats . minifiedSize ) ;
240
- console . error ( 'Efficiency: %d%' , ~ ~ ( minified . stats . efficiency * 10000 ) / 100.0 ) ;
241
- console . error ( 'Time spent: %dms' , minified . stats . timeSpent ) ;
242
-
243
- if ( minified . inlinedStylesheets . length > 0 ) {
244
- console . error ( 'Inlined stylesheets:' ) ;
245
- minified . inlinedStylesheets . forEach ( function ( uri ) {
246
- console . error ( '- %s' , uri ) ;
247
- } ) ;
237
+ var inputPath ;
238
+
239
+ if ( options . batch && ! ( 'styles' in minified ) ) {
240
+ for ( inputPath in minified ) {
241
+ processMinified ( process , configurations , minified [ inputPath ] , inputPath , toOutputPath ( inputPath ) ) ;
248
242
}
243
+ } else {
244
+ processMinified ( process , configurations , minified , null , options . output ) ;
249
245
}
246
+ } ) ;
247
+ }
248
+
249
+ function toOutputPath ( inputPath ) {
250
+ return inputPath . replace ( / \. c s s $ / , '-min.css' ) ;
251
+ }
250
252
251
- outputFeedback ( minified . errors , true ) ;
252
- outputFeedback ( minified . warnings ) ;
253
+ function processMinified ( process , configurations , minified , inputPath , outputPath ) {
254
+ var mapOutputPath ;
253
255
254
- if ( minified . errors . length > 0 ) {
255
- process . exit ( 1 ) ;
256
+ if ( configurations . debugMode ) {
257
+ if ( inputPath ) {
258
+ console . error ( 'File: %s' , inputPath ) ;
256
259
}
257
260
258
- if ( configurations . removeInlinedFiles ) {
259
- minified . inlinedStylesheets . forEach ( fs . unlinkSync ) ;
260
- }
261
+ console . error ( 'Original: %d bytes' , minified . stats . originalSize ) ;
262
+ console . error ( 'Minified: %d bytes' , minified . stats . minifiedSize ) ;
263
+ console . error ( 'Efficiency: %d%' , ~ ~ ( minified . stats . efficiency * 10000 ) / 100.0 ) ;
264
+ console . error ( 'Time spent: %dms' , minified . stats . timeSpent ) ;
261
265
262
- if ( minified . sourceMap ) {
263
- mapFilename = path . basename ( options . output ) + '.map' ;
264
- output ( process , options , minified . styles + lineBreak + '/*# sourceMappingURL=' + mapFilename + ' */' ) ;
265
- outputMap ( options , minified . sourceMap , mapFilename ) ;
266
- } else {
267
- output ( process , options , minified . styles ) ;
266
+ if ( minified . inlinedStylesheets . length > 0 ) {
267
+ console . error ( 'Inlined stylesheets:' ) ;
268
+ minified . inlinedStylesheets . forEach ( function ( uri ) {
269
+ console . error ( '- %s' , uri ) ;
270
+ } ) ;
268
271
}
269
- } ) ;
272
+
273
+ console . error ( '' ) ;
274
+ }
275
+
276
+ outputFeedback ( minified . errors , true ) ;
277
+ outputFeedback ( minified . warnings ) ;
278
+
279
+ if ( minified . errors . length > 0 ) {
280
+ process . exit ( 1 ) ;
281
+ }
282
+
283
+ if ( configurations . removeInlinedFiles ) {
284
+ minified . inlinedStylesheets . forEach ( fs . unlinkSync ) ;
285
+ }
286
+
287
+ if ( minified . sourceMap ) {
288
+ mapOutputPath = outputPath + '.map' ;
289
+ output ( process , outputPath , minified . styles + lineBreak + '/*# sourceMappingURL=' + path . basename ( mapOutputPath ) + ' */' ) ;
290
+ outputMap ( mapOutputPath , minified . sourceMap ) ;
291
+ } else {
292
+ output ( process , outputPath , minified . styles ) ;
293
+ }
270
294
}
271
295
272
296
function applyNonBooleanCompatibilityFlags ( cleanCss , compatibility ) {
@@ -319,17 +343,16 @@ function getSourceMapContent(sourceMapPath) {
319
343
return content ;
320
344
}
321
345
322
- function output ( process , options , minified ) {
323
- if ( options . output ) {
324
- fs . writeFileSync ( options . output , minified , 'utf8' ) ;
346
+ function output ( process , outputPath , minified ) {
347
+ if ( outputPath ) {
348
+ fs . writeFileSync ( outputPath , minified , 'utf8' ) ;
325
349
} else {
326
350
process . stdout . write ( minified ) ;
327
351
}
328
352
}
329
353
330
- function outputMap ( options , sourceMap , mapFilename ) {
331
- var mapPath = path . join ( path . dirname ( options . output ) , mapFilename ) ;
332
- fs . writeFileSync ( mapPath , sourceMap . toString ( ) , 'utf-8' ) ;
354
+ function outputMap ( mapOutputPath , sourceMap ) {
355
+ fs . writeFileSync ( mapOutputPath , sourceMap . toString ( ) , 'utf-8' ) ;
333
356
}
334
357
335
358
module . exports = cli ;
0 commit comments