You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

110 lines
3.0 KiB

/*
* grunt-contrib-uglify
* http://gruntjs.com/
*
* Copyright (c) 2012 "Cowboy" Ben Alman, contributors
* Licensed under the MIT license.
*/
'use strict';
module.exports = function(grunt) {
// Internal lib.
var contrib = require('grunt-lib-contrib').init(grunt);
var uglify = require('./lib/uglify').init(grunt);
grunt.registerMultiTask('uglify', 'Minify files with UglifyJS.', function() {
// Merge task-specific and/or target-specific options with these defaults.
var options = this.options({
banner: '',
compress: {
warnings: false
},
mangle: {},
beautify: false,
report: false
});
// Process banner.
var banner = grunt.template.process(options.banner);
var mapNameGenerator, mappingURLGenerator;
// Iterate over all src-dest file pairs.
this.files.forEach(function(f) {
var src = f.src.filter(function(filepath) {
// Warn on and remove invalid source files (if nonull was set).
if (!grunt.file.exists(filepath)) {
grunt.log.warn('Source file "' + filepath + '" not found.');
return false;
} else {
return true;
}
});
// function to get the name of the sourceMap
if (typeof options.sourceMap === "function") {
mapNameGenerator = options.sourceMap;
}
// function to get the sourceMappingURL
if (typeof options.sourceMappingURL === "function") {
mappingURLGenerator = options.sourceMappingURL;
}
if (mapNameGenerator) {
try {
options.sourceMap = mapNameGenerator(f.dest);
} catch (e) {
var err = new Error('SourceMapName failed.');
err.origError = e;
grunt.fail.warn(err);
}
}
if (mappingURLGenerator) {
try {
options.sourceMappingURL = mappingURLGenerator(f.dest);
} catch (e) {
var err = new Error('SourceMapName failed.');
err.origError = e;
grunt.fail.warn(err);
}
}
// Minify files, warn and fail on error.
var result;
try {
result = uglify.minify(src, f.dest, options);
} catch (e) {
var err = new Error('Uglification failed.');
if (e.msg) {
err.message += ', ' + e.msg + '.';
}
err.origError = e;
grunt.fail.warn(err);
}
// Concat banner + minified source.
var output = banner + result.min;
// Write the destination file.
grunt.file.write(f.dest, output);
// Write source map
if (options.sourceMap) {
grunt.file.write(options.sourceMap, result.sourceMap);
grunt.log.writeln('Source Map "' + options.sourceMap + '" created.');
}
// Print a success message.
grunt.log.writeln('File "' + f.dest + '" created.');
// ...and report some size information.
if (options.report) {
contrib.minMaxInfo(result.min, result.max, options.report);
}
});
});
};