Skip to content
A Ruby Wrapper for the Google Closure Compiler
Latest commit 4ae4436 Jan 6, 2016 @reefdog reefdog Prep for 1.1.12 release
* Update module version
* Update README version
* Update README URLs
Failed to load latest commit information.
lib Prep for 1.1.12 release Jan 6, 2016
test Update test syntax for Minitest Nov 12, 2015
.gitignore Ignore DS_Store files Nov 12, 2015
COPYING new version of the closure compiler brings us to 0.2.0 Feb 1, 2010
README.textile Prep for 1.1.12 release Jan 6, 2016
Rakefile Don't use sudo in gem rake tasks Jan 6, 2016


The Closure Compiler (as a Ruby Gem)

The closure-compiler gem is a svelte wrapper around the Google Closure Compiler for JavaScript compression.

Latest Version: 1.1.12

The Closure Compiler’s 2015-10-15 JAR-file is included with the gem.


sudo gem install closure-compiler


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''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'['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 to the initializer and they’ll be forwarded. For example, to raise the compilation level up a notch:

closure.compile('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.

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 =
  :java     => '/usr/local/bin/java16',
  :jar_file => '/usr/src/closure/build/latest.jar'
Something went wrong with that request. Please try again.