| Path: | README.md |
| Last Update: | Sat Feb 23 07:15:15 +0000 2019 |
# Uglifier [](http://travis-ci.org/lautis/uglifier) [](https://gemnasium.com/lautis/uglifier)
Ruby wrapper for [UglifyJS](github.com/mishoo/UglifyJS2) JavaScript compressor.
## Installation
Uglifier is available as a ruby gem.
$ gem install uglifier
Ensure that your environment has a JavaScript interpreter supported by [ExecJS](github.com/sstephenson/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
```ruby require ‘uglifier‘
Uglifier.new.compile(File.read("source.js")) # => js file minified
# Or alternatively Uglifier.compile(File.read("source.js")) ```
Uglifier also supports generating source maps:
```ruby 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:
```ruby Uglifier.new(:mangle => false).compile(source)
# Or Uglifier.compile(source, :mangle => false) ```
Available options and their defaults are
```ruby {
:output => {
:ascii_only => false, # Escape non-ASCII characters
:comments => :copyright, # Preserve comments (:all, :jsdoc, :copyright, :none)
:inline_script => false, # Escape occurrences of </script in strings
:quote_keys => false, # Quote keys in object literals
:max_line_len => 32 * 1024, # Maximum line length in minified code
:bracketize => false, # Bracketize if, for, do, while or with statements, even if their body is a single statement
:semicolons => true, # Separate statements with semicolons
:preserve_line => false, # Preserve line numbers in outputs
:beautify => false, # Beautify output
:indent_level => 4, # Indent level in spaces
:indent_start => 0, # Starting indent level
:space_colon => false, # Insert space before colons (only with beautifier)
:width => 80 # Specify line width when beautifier is used (only with beautifier)
},
:mangle => {
:except => ["$super"] # Argument names to be excluded from mangling
}, # Mangle variable and function names, set to false to skip mangling
:compress => {
:sequences => true, # Allow statements to be joined by commas
:properties => true, # Rewrite property access using the dot notation
:dead_code => true, # Remove unreachable code
:drop_debugger => true, # Remove debugger; statements
:unsafe => false, # Apply "unsafe" transformations
:conditionals => true, # Optimize for if-s and conditional expressions
:comparisons => true, # Apply binary node optimizations for comparisons
:evaluate => true, # Attempt to evaluate constant expressions
:booleans => true, # Various optimizations to boolean contexts
:loops => true, # Optimize lops when condition can be statically determined
:unused => true, # Drop unreferenced functions and variables
:hoist_funs => true, # Hoist function declarations
:hoist_vars => false, # Hoist var declarations
:if_return => true, # Optimizations for if/return and if/continue
:join_vars => true, # Join consecutive var statements
:cascade => true # Cascade sequences
}, # Apply transformations to code, set to false to skip
:define => {}, # Define values for symbol replacement
:enclose => false, # Enclose in output function wrapper, define replacements as key-value pairs
:source_filename => nil, # The filename of the input file
:source_root => nil, # The URL of the directory which contains :source_filename
:output_filename => nil, # The filename or URL where the minified output can be found
:input_source_map => nil, # The contents of the source map describing the input
:screw_ie8 => false # Generate safe code for IE8
} ```
## Development
Uglifier bundles its javascript dependencies using git submodules. If you want to rebuild the javascript you will first need to get the latest version of the code with `git submodule update —init`. After you have the git submodules at the desired versions, run `rake js` to recreate `lib/uglify.js`.
See [CONTRIBUTING](github.com/lautis/uglifier/blob/master/CONTRIBUTING.md) for details about contributing to Uglifier.
## Copyright
© Ville Lautanala. Released under MIT license, see [LICENSE](github.com/lautis/uglifier/blob/master/LICENSE.txt) for details.