Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A Source Map enabled pure-ruby version of Doug Crockford's awesome jsmin

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 HISTORY
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README.md
Octocat-spinner-32 Rakefile
Octocat-spinner-32 jsmin.gemspec
Octocat-spinner-32 source_map-jsmin.gemspec
README.md

This is a version of Douglas Crockford's eponymous jsmin that also generates a source map so that you can debug your javascript as though it had never been minified at all!

Huge thanks should be given to Ryan Grove for porting Douglas Crockford's C code to Ruby so that I could ruin it :).

Installation

gem install source_map-jsmin

Creating a source map

    input = File.read("public/javascripts/myscript.js")

    map = SourceMap::JSMin.minify(input, :input_filename => "myscript.js",
                                         :output_filename => "myscript.min.js",
                                         :source_root => "http://localhost:3000/javascripts/"
                                 )

    # Output the minified code to a file for serving
    File.open("public/javascripts/myscript.min.js", "w"){ |f| f << map.generated_output }

    # Output the map to a file in the same manner
    File.open("public/javascripts/myscript.map.json", "w"){ |f| f << map.to_s }

Using a source map

In summary, you need to serve public/javascripts/myscript.min.js with an extra HTTP header: X-SourceMap: /javascripts/myscript.map.json, and enable source maps in the developer console of your Google Chrome 19+ web browser.

For more details try the source_map gem's README.

Future work

  • I'd like to support passing an :input_sourcemap argument to minify so that if the input file was generated by a process that created a source map, the minification step will create a source map that refers to the original sources instead of to the intermediary input file.

License

This is all licensed under the MIT license, though it inherits Douglas Crockfords additional: "Must be used for good not evil" clause. If you have really pernickety lawyers this may cause you problems; but if you're actually using it for evil, you probably don't care too much.

Meta-fu

Contributions, bug reports and feature requests are welcome, though if they are to do with the core JSMIN please send them upstream and then notify me.

Something went wrong with that request. Please try again.