Default options for compilation
Minifies JavaScript code using implicit context.
source should be a String or IO object containing valid JavaScript. options contain optional overrides to Uglifier::DEFAULTS
Returns minified code as String
# File lib/uglifier.rb, line 41 def self.compile(source, options = {}) self.new(options).compile(source) end
Initialize new context for Uglifier with given options
options - Hash of options to override Uglifier::DEFAULTS
# File lib/uglifier.rb, line 48 def initialize(options = {}) @options = DEFAULTS.merge(options) @context = ExecJS.compile(File.open(ES5FallbackPath, "r:UTF-8").read + File.open(SourcePath, "r:UTF-8").read) end
Minifies JavaScript code
source should be a String or IO object containing valid JavaScript.
Returns minified code as String
# File lib/uglifier.rb, line 58 def compile(source) source = source.respond_to?(:read) ? source.read : source.to_s js = [] js << "var result = '';" js << "var source = #{MultiJson.dump(source)};" js << "var ast = UglifyJS.parser.parse(source);" if @options[:lift_vars] js << "ast = UglifyJS.uglify.ast_lift_variables(ast);" end if @options[:copyright] js << " var comments = UglifyJS.parser.tokenizer(source)().comments_before; for (var i = 0; i < comments.length; i++) { var c = comments[i]; result += (c.type == "comment1") ? "//"+c.value+"\\n" : "/*"+c.value+"*/\\n"; } " end js << "ast = UglifyJS.uglify.ast_mangle(ast, #{MultiJson.dump(mangle_options)});" if @options[:squeeze] js << "ast = UglifyJS.uglify.ast_squeeze(ast, #{MultiJson.dump(squeeze_options)});" end if @options[:unsafe] js << "ast = UglifyJS.uglify.ast_squeeze_more(ast);" end js << "result += UglifyJS.uglify.gen_code(ast, #{MultiJson.dump(gen_code_options)});" if !@options[:beautify] && @options[:max_line_length] js << "result = UglifyJS.uglify.split_lines(result, #{@options[:max_line_length].to_i})" end js << "return result + ';';" @context.exec js.join("\n") end