minify.rb
1 #!/usr/bin/env ruby 2 # encoding: utf-8 3 4 require 'json' 5 require 'net/http' 6 7 if !ARGV[0] 8 puts 'usage: minify.rb filename' 9 exit! 10 end 11 12 def minify_js 13 api_url = 'http://closure-compiler.appspot.com/compile' 14 filename = ARGV[0] 15 16 out_dir = File.expand_path(File.dirname(__FILE__)) 17 out_file = out_dir + '/' + filename.split('-')[0] + '.js' 18 19 puts 'Compiling...' 20 21 resp = Net::HTTP.post_form(URI(api_url), { 22 output_format: 'json', 23 output_info: [ 'compiled_code', 'warnings', 'errors', 'statistics' ], 24 compilation_level: 'SIMPLE_OPTIMIZATIONS', 25 language: 'ECMASCRIPT5', 26 js_code: File.open(filename, 'r:UTF-8') { |f| f.read } 27 }) 28 29 if resp.kind_of?(Net::HTTPSuccess) 30 data = JSON.parse(resp.body, symbolize_names: true) 31 32 if data[:serverErrors] 33 puts 'Server errors:' 34 data[:serverErrors].each do |err| 35 puts " #{err[:error]} (#{err[:code]})" 36 end 37 exit! 38 end 39 40 if data[:errors] 41 puts 'Errors:' 42 data[:errors].each do |err| 43 puts " #{err[:error]} (#{err[:lineno]}, #{err[:charno]})" 44 end 45 exit! 46 end 47 48 if data[:warnings] 49 puts 'Warnings:' 50 data[:warnings].each do |err| 51 puts " #{err[:warning]} (#{err[:lineno]}, #{err[:charno]})" 52 end 53 end 54 55 if data[:statistics] 56 puts 'Statistics:' 57 data[:statistics].each do |k, v| 58 puts " #{k}: #{v}" 59 end 60 end 61 62 puts 'Writing...' 63 File.open(out_file, 'wb') do |f| 64 f.write(data[:compiledCode]) 65 end 66 67 else 68 puts "Bad status code: #{resp}" 69 end 70 71 puts 'Done' 72 end 73 74 minify_js