74 lines
1.6 KiB
Ruby
74 lines
1.6 KiB
Ruby
#!/usr/bin/env ruby
|
|
# encoding: utf-8
|
|
|
|
require 'json'
|
|
require 'net/http'
|
|
|
|
if !ARGV[0]
|
|
puts 'usage: minify.rb filename'
|
|
exit!
|
|
end
|
|
|
|
def minify_js
|
|
api_url = 'http://closure-compiler.appspot.com/compile'
|
|
filename = ARGV[0]
|
|
|
|
out_dir = File.expand_path(File.dirname(__FILE__))
|
|
out_file = out_dir + '/' + filename.split('-')[0] + '.js'
|
|
|
|
puts 'Compiling...'
|
|
|
|
resp = Net::HTTP.post_form(URI(api_url), {
|
|
output_format: 'json',
|
|
output_info: [ 'compiled_code', 'warnings', 'errors', 'statistics' ],
|
|
compilation_level: 'SIMPLE_OPTIMIZATIONS',
|
|
language: 'ECMASCRIPT5',
|
|
js_code: File.open(filename, 'r:UTF-8') { |f| f.read }
|
|
})
|
|
|
|
if resp.kind_of?(Net::HTTPSuccess)
|
|
data = JSON.parse(resp.body, symbolize_names: true)
|
|
|
|
if data[:serverErrors]
|
|
puts 'Server errors:'
|
|
data[:serverErrors].each do |err|
|
|
puts " #{err[:error]} (#{err[:code]})"
|
|
end
|
|
exit!
|
|
end
|
|
|
|
if data[:errors]
|
|
puts 'Errors:'
|
|
data[:errors].each do |err|
|
|
puts " #{err[:error]} (#{err[:lineno]}, #{err[:charno]})"
|
|
end
|
|
exit!
|
|
end
|
|
|
|
if data[:warnings]
|
|
puts 'Warnings:'
|
|
data[:warnings].each do |err|
|
|
puts " #{err[:warning]} (#{err[:lineno]}, #{err[:charno]})"
|
|
end
|
|
end
|
|
|
|
if data[:statistics]
|
|
puts 'Statistics:'
|
|
data[:statistics].each do |k, v|
|
|
puts " #{k}: #{v}"
|
|
end
|
|
end
|
|
|
|
puts 'Writing...'
|
|
File.open(out_file, 'wb') do |f|
|
|
f.write(data[:compiledCode])
|
|
end
|
|
|
|
else
|
|
puts "Bad status code: #{resp}"
|
|
end
|
|
|
|
puts 'Done'
|
|
end
|
|
|
|
minify_js
|