optimize-css-assets-webpack-plugin
Advanced tools
Comparing version
89
index.js
@@ -6,15 +6,15 @@ var _ = require('underscore'); | ||
this.options = options || {}; | ||
if (this.options.assetNameRegExp === undefined) { | ||
this.options.assetNameRegExp = /\.css$/g; | ||
} | ||
if (this.options.cssProcessor === undefined) { | ||
this.options.cssProcessor = require('cssnano'); | ||
} | ||
if (this.options.cssProcessorOptions === undefined) { | ||
this.options.cssProcessorOptions = {}; | ||
} | ||
if (this.options.canPrint === undefined) { | ||
@@ -27,3 +27,3 @@ this.options.canPrint = true; | ||
if (this.options.canPrint) { | ||
console.log.apply(console, arguments); | ||
console.log.apply(console, arguments); | ||
} | ||
@@ -33,3 +33,3 @@ }; | ||
OptimizeCssAssetsPlugin.prototype.processCss = function(css, assetName) { | ||
return this.options.cssProcessor.process(css, Object.assign({ to: assetName }, this.options.cssProcessorOptions)); | ||
return this.options.cssProcessor.process(css, Object.assign({ to: assetName }, this.options.cssProcessorOptions)); | ||
}; | ||
@@ -42,59 +42,62 @@ | ||
OptimizeCssAssetsPlugin.prototype.apply = function(compiler) { | ||
var self = this; | ||
compiler.plugin('emit', function(compilation, compileCallback) { | ||
self.print('\nStarting to optimize CSS...'); | ||
var assets = compilation.assets; | ||
var cssAssetNames = _.filter( | ||
_.keys(assets), | ||
function(assetName) { | ||
_.keys(assets), | ||
function(assetName) { | ||
return assetName.match(self.options.assetNameRegExp); | ||
} | ||
); | ||
var hasErrors = false; | ||
var promises = []; | ||
_.each( | ||
cssAssetNames, | ||
function(assetName) { | ||
self.print('Processing ' + assetName + '...'); | ||
var asset = assets[assetName]; | ||
var originalCss = asset.source(); | ||
var promise = self.processCss(originalCss, assetName); | ||
promise.then( | ||
function (result) { | ||
if (hasErrors) { | ||
self.print('Skiping ' + assetName + ' because of an error.'); | ||
return; | ||
var promise = self | ||
.processCss(originalCss, assetName) | ||
.then( | ||
function (result) { | ||
if (hasErrors) { | ||
self.print('Skiping ' + assetName + ' because of an error.'); | ||
return; | ||
} | ||
var processedCss = result.css; | ||
assets[assetName] = self.createCssAsset(processedCss, asset); | ||
self.print('Processed ' + assetName + ', before: ' + originalCss.length + ', after: ' + processedCss.length + ', ratio: ' + (Math.round(((processedCss.length * 100) / originalCss.length) * 100) / 100) + '%'); | ||
} | ||
var processedCss = result.css; | ||
assets[assetName] = self.createCssAsset(processedCss, asset); | ||
self.print('Processed ' + assetName + ', before: ' + originalCss.length + ', after: ' + processedCss.length + ', ratio: ' + (Math.round(((processedCss.length * 100) / originalCss.length) * 100) / 100) + '%'); | ||
}, function(err) { | ||
hasErrors = true; | ||
self.print('Error processing file: ' + assetName); | ||
console.error(err); | ||
} | ||
); | ||
).catch(function(err) { | ||
hasErrors = true; | ||
self.print('Error processing file: ' + assetName); | ||
throw err; | ||
} | ||
); | ||
promises.push(promise); | ||
} | ||
); | ||
Promise.all(promises).then(function () { compileCallback(); }, compileCallback); | ||
Promise.all(promises) | ||
.then(function () { compileCallback(); }) | ||
.catch(compileCallback); | ||
}); | ||
@@ -101,0 +104,0 @@ }; |
{ | ||
"name": "optimize-css-assets-webpack-plugin", | ||
"version": "1.3.1", | ||
"version": "1.3.2", | ||
"author": "Nuno Rodrigues", | ||
@@ -5,0 +5,0 @@ "description": "A Webpack plugin to optimize \\ minimize CSS assets.", |
74
5.71%6449
-1.41%