A Ruby Wrapper for the Google Closure Compiler
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


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.14

The Closure Compiler’s 2018-05-06 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'
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 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.

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'