Uglifier
Ruby wrapper for UglifyJS JavaScript
compressor.
UglifyJS only works with ES5. If you need to compress ES6, ruby-terser is a better option.
Rails
When used in Rails, replace
config.assets.js_compressor = :uglifier
with
config.assets.js_compressor = Uglifier.new(harmony: true)
in config/environments/production.rb
.
Installation
Uglifier is available as a ruby gem.
$ gem install uglifier
Ensure that your environment has a JavaScript interpreter supported by
ExecJS. Using therubyracer
gem
is a safe choice if a runtime isn't already present. Note that while JScript built-in Windows 7 and older works, it is extremely slow.
Usage
require 'uglifier'
Uglifier.new.compile(File.read("source.js"))
Uglifier.compile(File.read("source.js"))
Uglifier also supports generating source maps:
uglified, source_map = Uglifier.new.compile_with_map(source)
When initializing UglifyJS, you can tune the behavior of UglifyJS by passing options. For example, if you want disable variable name mangling:
Uglifier.new(:mangle => false).compile(source)
Uglifier.compile(source, :mangle => false)
Available options and their defaults are
{
:output => {
:ascii_only => true,
:comments => :copyright,
:inline_script => false,
:quote_keys => false,
:max_line_len => 32 * 1024,
:bracketize => false,
:semicolons => true,
:preserve_line => false,
:beautify => false,
:indent_level => 4,
:indent_start => 0,
:width => 80,
:preamble => nil,
:wrap_iife => false,
:shebang => true,
:quote_style => 0,
:keep_quoted_props => false
},
:mangle => {
:eval => false,
:reserved => ["$super"],
:sort => false,
:toplevel => false,
:properties => false,
:keep_fnames => false
},
:mangle_properties => {
:regex => nil,
:ignore_quoted => false,
:debug => false,
},
:compress => {
:sequences => true,
:properties => true,
:dead_code => true,
:drop_debugger => true,
:unsafe => false,
:unsafe_comps => false,
:unsafe_math => false,
:unsafe_proto => false,
:conditionals => true,
:comparisons => true,
:evaluate => true,
:booleans => true,
:loops => true,
:unused => true,
:toplevel => false,
:top_retain => [],
:hoist_funs => true,
:hoist_vars => false,
:if_return => true,
:join_vars => true,
:collapse_vars => false,
:reduce_funcs => false,
:reduce_vars => false,
:negate_iife => true,
:pure_getters => false,
:pure_funcs => nil,
:drop_console => false,
:keep_fargs => false,
:keep_fnames => false,
:passes => 1,
:keep_infinity => false,
:side_effects => true,
:switches => true,
},
:parse => {
:bare_returns => false,
:expression => false,
:html5_comments => true,
:shebang => true,
:strict => false
},
:define => {},
:enclose => false,
:keep_fnames => false,
:source_map => {
:map_url => false,
:url => false,
:sources_content => false,
:filename => nil,
:root => nil,
:output_filename => nil,
:input_source_map => nil
},
:error_context_lines => 8,
:harmony => false
}
When passing a regular expression to the output => comments option, be sure to pass a valid Ruby Regexp.
The beginning and ending of comments are removed and cannot be matched (/*, */, //). For example:
When matching
/*!
* comment
*/
use Uglifier.new(output: {comments: /^!/})
.
Development
Tests are run using
bundle exec rake
See CONTRIBUTING for details about working on and contributing to Uglifier.
Copyright
© Ville Lautanala. Released under MIT license, see LICENSE for details.