| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | var SourceMapSource = require("webpack-core/lib/SourceMapSource"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 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); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 			compilation.additionalChunkAssets.forEach(function(file) { | 
					
						
							|  |  |  | 				files.push(file); | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 			files.forEach(function(file) { | 
					
						
							|  |  |  | 				try { | 
					
						
							| 
									
										
										
										
											2013-07-04 17:55:37 +08:00
										 |  |  | 					var asset = compilation.assets[file]; | 
					
						
							|  |  |  | 					var input = asset.source(); | 
					
						
							|  |  |  | 					if(asset.__UglifyJsPlugin) { | 
					
						
							|  |  |  | 						compilation.assets[file] = asset.__UglifyJsPlugin; | 
					
						
							|  |  |  | 						return; | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 					var inputSourceMap = compilation.assets[file].map(); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 					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 || {}); | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 					var map = null; | 
					
						
							|  |  |  | 					map = uglify.SourceMap({ | 
					
						
							|  |  |  | 						file: file, | 
					
						
							|  |  |  | 						root: "" | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 					var stream = uglify.OutputStream({ | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 						comments: options.comments || /^\**!|@preserve|@license/, | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 						beautify: options.beautify, | 
					
						
							|  |  |  | 						source_map: map | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 					}); | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 					ast.print(stream); | 
					
						
							|  |  |  | 					map = map + ""; | 
					
						
							|  |  |  | 					stream = stream + ""; | 
					
						
							| 
									
										
										
										
											2013-07-04 17:55:37 +08:00
										 |  |  | 					asset.__UglifyJsPlugin = compilation.assets[file] = new SourceMapSource(stream, file, map, input, inputSourceMap); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 				} catch(err) { | 
					
						
							|  |  |  | 					err.file = file; | 
					
						
							|  |  |  | 					compilation.warnings.push(err); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 			callback(); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-05-13 04:44:10 +08:00
										 |  |  | 		compilation.plugin("normal-module-loader", function(context) { | 
					
						
							|  |  |  | 			context.minimize = true; | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }; |