h1. The Closure Compiler (as a Ruby Gem). Updated.
The closure-compiler-updated gem is a Ruby wrapper around the "Google Closure Compiler":https://developers.google.com/closure/compiler/ for JavaScript compression.
Latest Version: "1.1.19":https://rubygems.org/gems/closure-compiler-updated
The Closure Compiler's v20211107 JAR-file is included with the gem.
h2. Installation
sudo gem install closure-compiler-updated
h2. Usage
The @Closure::Compiler@ has a @compile@ method, which can be passed a string or an open @IO@ object, and returns the compiled JavaScript. The result is returned as a string, or, if a block is passed, yields as an @IO@ object for streaming writes.
require 'rubygems'
require 'closure-compiler'
Closure::Compiler.new.compile(File.open('underscore.js', 'r'))
=> "(function(){var j=this,m=j._;function i(a){......
The @Closure::Compiler@ also has @compile_file@ and @compile_files@ methods, which can be passed a file path or an array of file paths respectively. The files are concatenated and compiled and, like the @compile@ method, the result is returned as a string or, if block is passed, yields an @IO@ object.
require 'rubygems'
require 'closure-compiler'
Closure::Compiler.new.compile_files(['underscore.js', 'jasmine.js']))
=> "(function(){var j=this,m=j._;function i(a){......
When creating a @Closure::Compiler@, you can pass "any options that the command-line compiler accepts":https://developers.google.com/closure/compiler/docs/gettingstarted_app to the initializer and they'll be forwarded. For example, to raise the compilation level up a notch:
closure = Closure::Compiler.new(:compilation_level => 'ADVANCED_OPTIMIZATIONS')
closure.compile(File.open('underscore.js', 'r'))
=> "(function(){var j=this,m=j.h;function i(a){......
The default values of all the compiler flags are identical to the command-line version. The default compilation_level is "SIMPLE_OPTIMIZATIONS".
A @Closure::Error@ exception will be raised, explaining the JavaScript syntax error, if compilation fails for any reason.
h2. YUI Compressor Compatibility
Effort has been made to make the "closure-compiler" gem a drop-in alternative to the "ruby-yui-compressor". To that end, @Closure::Compiler#compile@ has been aliased as @compress@, and can take the same string or IO argument that a @YUI::JavaScriptCompressor#compress@ can. In addition, the @Closure::Compiler@ initializer can take @java@ and @jar_file@ options, overriding the location of the Java command and the Closure Compiler JAR file, respectively.
compiler = Closure::Compiler.new(
:java => '/usr/local/bin/java16',
:jar_file => '/usr/src/closure/build/latest.jar'
)