mirror of https://github.com/webpack/webpack.git
55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
/*
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
Author Tobias Koppers @sokra
|
|
*/
|
|
var RawSource = require("webpack-core/lib/RawSource");
|
|
var uglify = require("uglify-js");
|
|
|
|
function UglifyJsPlugin(options) {
|
|
if(typeof options != "object") options = {};
|
|
if(typeof options.compressor == "undefined") {
|
|
options.compressor = {
|
|
warnings: false
|
|
}
|
|
}
|
|
this.options = options;
|
|
}
|
|
module.exports = UglifyJsPlugin;
|
|
UglifyJsPlugin.prototype.apply = function(compiler) {
|
|
var options = this.options;
|
|
compiler.plugin("compilation", function(compilation) {
|
|
compilation.plugin("optimize-chunk-assets", function(chunks, callback) {
|
|
var files = [];
|
|
chunks.forEach(function(chunk) {
|
|
chunk.files.forEach(function(file) {
|
|
files.push(file);
|
|
});
|
|
});
|
|
files.forEach(function(file) {
|
|
try {
|
|
var input = compilation.assets[file].source();
|
|
var ast = uglify.parse(input, {
|
|
filename: file
|
|
});
|
|
ast.figure_out_scope()
|
|
if(options.compressor !== false) {
|
|
var compressor = uglify.Compressor(options.compressor);
|
|
ast = ast.transform(compressor);
|
|
ast.figure_out_scope();
|
|
ast.compute_char_frequency(options.mangle || {});
|
|
ast.mangle_names(options.mangle || {});
|
|
}
|
|
var source = ast.print_to_string({
|
|
comments: options.comments || /^\**!|@preserve|@license/,
|
|
beautify: options.beautify
|
|
});
|
|
compilation.assets[file] = new RawSource(source);
|
|
} catch(err) {
|
|
err.file = file;
|
|
compilation.warnings.push(err);
|
|
}
|
|
});
|
|
callback();
|
|
});
|
|
});
|
|
}; |