Skip to content

Instantly share code, notes, and snippets.

@SamSaffron
Created May 4, 2016 07:44
Show Gist options
  • Save SamSaffron/fe9f938f43a63b2f709b9bd546ba9087 to your computer and use it in GitHub Desktop.
Save SamSaffron/fe9f938f43a63b2f709b9bd546ba9087 to your computer and use it in GitHub Desktop.
require 'therubyracer'
require 'json'
ctx = V8::Context.new
ctx.eval(File.read('uglify/es5.js'))
ctx.eval(File.read('uglify/split.js'))
ctx.eval(File.read('uglify/uglify.js'))
ctx.eval(File.read('uglify/uglifier.js'))
puts "done loading"
DEFAULTS = {
# rubocop:disable LineLength
:output => {
:ascii_only => true, # Escape non-ASCII characterss
: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)
:preamble => nil # Preamble for the generated JS file. Can be used to insert any code or comment.
},
:mangle => {
:eval => false, # Mangle names when eval of when is used in scope
:except => ["$super"], # Argument names to be excluded from mangling
:sort => false, # Assign shorter names to most frequently used variables. Often results in bigger output after gzip.
:toplevel => false, # Mangle names declared in the toplevel scope
:properties => false # Mangle property names
}, # Mangle variable and function names, set to false to skip mangling
:mangle_properties => false, # Mangle property names
: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 loops 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
:collapse_vars => false, # Collapse single-use var and const definitions when possible.
:negate_iife => true, # Negate immediately invoked function expressions to avoid extra parens
:pure_getters => false, # Assume that object property access does not have any side-effects
:pure_funcs => nil, # List of functions without side-effects. Can safely discard function calls when the result value is not used
:drop_console => false, # Drop calls to console.* functions
:angular => false, # Process @ngInject annotations
:keep_fargs => false, # Preserve unused function arguments
:keep_fnames => false # Preserve function names
}, # 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
:screw_ie8 => false, # Don't bother to generate safe code for IE8
:source_map => false, # Generate source map
:source_map_options => {}
}
src = File.read(ARGV[0])
puts ctx.eval("var opts = #{JSON.generate(DEFAULTS)}; opts['source'] = #{src.inspect}; uglifier(opts)")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment