74 lines
1.9 KiB
JavaScript
74 lines
1.9 KiB
JavaScript
"use strict";
|
|
|
|
var path = require('path');
|
|
var mkdirp = require('mkdirp');
|
|
var async = require('async');
|
|
var chalk = require('chalk');
|
|
var filesize = require('filesize');
|
|
|
|
var Optimizer = require('./optimizer');
|
|
|
|
module.exports = function (grunt) {
|
|
grunt.registerMultiTask('image', 'Optimize PNG, JPEG, GIF, SVG images.', function() {
|
|
|
|
var done = this.async();
|
|
var options = this.options({
|
|
pngquant: true,
|
|
optipng: false,
|
|
zopflipng: true,
|
|
advpng: true,
|
|
jpegRecompress: false,
|
|
jpegoptim: true,
|
|
mozjpeg: true,
|
|
gifsicle: true,
|
|
svgo: true
|
|
});
|
|
|
|
async.eachLimit(this.files, 10, function (file, next) {
|
|
|
|
var src = file.src[0];
|
|
var dest = file.dest;
|
|
|
|
// make directory if does not exist
|
|
mkdirp.sync(path.dirname(dest));
|
|
|
|
var optimizer = new Optimizer({
|
|
src: src,
|
|
dest: dest,
|
|
options: options
|
|
});
|
|
|
|
optimizer.optimize(function (error, data) {
|
|
|
|
if (error) {
|
|
grunt.warn(error);
|
|
return next(error);
|
|
}
|
|
|
|
if (data.isOptimized) {
|
|
grunt.log.writeln(
|
|
chalk.green('✔ ') + src + chalk.gray(' ->') +
|
|
chalk.gray(' before=') + chalk.yellow(filesize(data.originalSize)) +
|
|
chalk.gray(' after=') + chalk.cyan(filesize(data.optimizedSize)) +
|
|
chalk.gray(' reduced=') + chalk.green.underline(filesize(data.diffSize) + '(' + data.diffPercent + '%)')
|
|
);
|
|
} else {
|
|
grunt.log.writeln(
|
|
chalk.cyan('✗ ') + src + chalk.gray(' is not optimized') +
|
|
chalk.gray(' before=after=') + chalk.cyan(filesize(data.originalSize)) +
|
|
chalk.gray(' reduced=') + chalk.green.underline(filesize(0) + '(0%)')
|
|
);
|
|
}
|
|
|
|
next();
|
|
});
|
|
}, function (error) {
|
|
if (error) {
|
|
grunt.warn(error);
|
|
return done(error);
|
|
}
|
|
done();
|
|
});
|
|
});
|
|
};
|