Skip to content

Commit 46f115e

Browse files
committed
Optimize CSS before asset files are written to the disk
1 parent 12d82b7 commit 46f115e

File tree

2 files changed

+25
-19
lines changed

2 files changed

+25
-19
lines changed

index.js

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,45 @@
1-
var fs = require('fs');
2-
var path = require('path');
31
var _ = require('underscore');
42
var cssnano = require('cssnano');
53

64
function OptimizeCssAssetsPlugin() {};
75

86
OptimizeCssAssetsPlugin.prototype.apply = function(compiler) {
9-
compiler.plugin('after-emit', function (compilation, callback) {
7+
compiler.plugin('emit', function(compilation, compileCallback) {
8+
109
console.log('');
1110
console.log('Starting to optimize CSS...');
12-
var outputPath = compiler.options.output.path;
13-
var stats = compilation.getStats().toJson();
14-
var assetsByChunkName = stats.assetsByChunkName;
15-
var files = _.flatten(_.values(assetsByChunkName));
16-
var cssFiles = _.filter(files, function(fn){ return fn && fn.match && fn.match(/\.css$/g); });
11+
12+
var cssFiles = _.filter(_.keys(compilation.assets), function(fn){ return fn && fn.match && fn.match(/\.css$/g); });
13+
1714
var counter = 0;
1815
function checkFinish() {
1916
if (cssFiles.length >= counter++) {
2017
console.log('CSS optimize ended.');
21-
callback();
18+
compileCallback();
2219
}
2320
};
21+
2422
_.each(
25-
cssFiles,
26-
function(filename) {
27-
console.log('Processing ' + filename);
28-
var filePath = path.join(outputPath, filename);
29-
var css = fs.readFileSync(filePath, 'utf8');
30-
cssnano.process(css, {discardComments: {removeAll: true}}).then(
23+
cssFiles,
24+
function(assetName) {
25+
console.log('Processing ' + assetName);
26+
var asset = compilation.assets[assetName];
27+
var originalCss = asset.source();
28+
cssnano.process(originalCss, {discardComments: {removeAll: true}}).then(
3129
function (result) {
32-
fs.writeFileSync(filePath, result.css);
33-
console.log('Processing ' + filename + ' ended');
30+
var processedCss = result.css;
31+
compilation.assets[assetName] = {
32+
source: function() {
33+
return processedCss;
34+
},
35+
size: function() {
36+
return processedCss.length;
37+
}
38+
};
39+
console.log('Processing ' + assetName + ' ended, before: ' + originalCss.length + ', after: ' + processedCss.length + ', ratio: ' + (Math.round(((processedCss.length * 100) / originalCss.length) * 100) / 100) + '%');
3440
checkFinish();
3541
}, function(err) {
36-
console.log('Error processing file: ' + filename);
42+
console.log('Error processing file: ' + assetName);
3743
console.log(err);
3844
checkFinish();
3945
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "optimize-css-assets-webpack-plugin",
3-
"version": "1.0.0",
3+
"version": "1.1.0",
44
"author": "Nuno Rodrigues",
55
"description": "A Webpack plugin to optimize \\ minimize CSS assets.",
66
"dependencies": {

0 commit comments

Comments
 (0)