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 42 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 49 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 59 def compile(source) source = source.respond_to?(:read) ? source.read : source.to_s js = [] js << "var result = '';" js << "var source = #{json_encode(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 << <<-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"; } JS end js << "ast = UglifyJS.uglify.ast_mangle(ast, #{json_encode(mangle_options)});" if @options[:squeeze] js << "ast = UglifyJS.uglify.ast_squeeze(ast, #{json_encode(squeeze_options)});" end if @options[:unsafe] js << "ast = UglifyJS.uglify.ast_squeeze_more(ast);" end js << "result += UglifyJS.uglify.gen_code(ast, #{json_encode(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
# File lib/uglifier.rb, line 123 def defines Hash[(@options[:define] || {}).map do |k, v| token = if v.is_a? Numeric ['num', v] elsif [true, false].include?(v) ['name', v.to_s] elsif v == nil ['name', 'null'] else ['string', v.to_s] end [k, token] end] end
# File lib/uglifier.rb, line 138 def gen_code_options options = { :ascii_only => @options[:ascii_only], :inline_script => @options[:inline_script], :quote_keys => @options[:quote_keys] } if @options[:beautify] options.merge(:beautify => true).merge(@options[:beautify_options]) else options end end
# File lib/uglifier.rb, line 154 def json_encode(obj) MultiJson.dump(obj) end
# File lib/uglifier.rb, line 105 def mangle_options { "mangle" => @options[:mangle], "toplevel" => @options[:toplevel], "defines" => defines, "except" => @options[:except], "no_functions" => @options[:mangle] == :vars } end
# File lib/uglifier.rb, line 115 def squeeze_options { "make_seqs" => @options[:seqs], "dead_code" => @options[:dead_code], "keep_comps" => !@options[:unsafe] } end