bin/packr in packr-3.1.0 vs bin/packr in packr-3.1.1
- old
+ new
@@ -1,25 +1,28 @@
+#!/usr/bin/env ruby
+
require 'rubygems'
require 'oyster'
-require 'packr'
+require File.expand_path('../../lib/packr', __FILE__)
spec = Oyster.spec do
name "packr -- JavaScript code compressor based on Dean Edwards' Packer"
synopsis <<-EOS
packr [OPTIONS] INPUT_FILES > OUTPUT_FILE
cat INPUT_FILES | packr [OPTIONS] > OUTPUT_FILE
EOS
description <<-EOS
- PackR is a program for compressing JavaScript programs. It can remove whitespace
- and comments, compress local variable names, compress/obfuscate private identifiers,
- and encode the program in base-62.
+ PackR is a program for compressing JavaScript programs. It can remove
+ whitespace and comments, compress local variable names, compress/obfuscate
+ private identifiers, and encode the program in base-62.
- When invoked from the command line, it concatenates all the code in INPUT_FILES (or
- from standard input) and compresses the code using the given options, printing the
- result to standard output. You can pipe this output into another file to save it.
+ When invoked from the command line, it concatenates all the code in
+ INPUT_FILES (or from standard input) and compresses the code using the given
+ options, printing the result to standard output. You can pipe this output into
+ another file to save it.
EOS
flag :'shrink-vars', :default => true,
:desc => 'Shrink local variable names inside functions'
@@ -32,60 +35,63 @@
array :protect, :default => [],
:desc => 'List of variable names to protect from compression when using --shrink-vars'
notes <<-EOS
This program is not a JavaScript parser, and rewrites your files using regular
- expressions. Be sure to include semicolons and braces everywhere they are required
- so that your program will work correctly when packed down to a single line.
+ expressions. Be sure to include semicolons and braces everywhere they are
+ required so that your program will work correctly when packed down to a single
+ line.
By far the most efficient way to serve JavaScript over the web is to use PackR
- with the --shrink-vars flag, combined with gzip compression. If you don't have access
- to your server config to set up mod_deflate, you can generate gzip files using
- (on Unix-like systems):
+ with the --shrink-vars flag, combined with gzip compression. If you don't have
+ access to your server config to set up mod_deflate, you can generate gzip
+ files using (on Unix-like systems):
packr -s my-file.js | gzip > my-file.js.gz
- You can then get Apache to serve the files by putting this in your .htaccess file:
+ You can then get Apache to serve the files by putting this in your .htaccess
+ file:
AddEncoding gzip .gz
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [QSA,L]
- If you really cannot serve gzip files, use the --base62 option to further compress
- your code. This mode is at its best when compressing large files with many repeated
- tokens.
+ If you really cannot serve gzip files, use the --base62 option to further
+ compress your code. This mode is at its best when compressing large files with
+ many repeated tokens.
- The --private option can be used to stop other programs calling private methods
- in your code by renaming anything beginning with a single underscore. Beware that
- you should not use this if the generated file contains 'private' methods that need
- to be accessible by other files. Also know that all the files that access any
- particular private method must be compressed together so they all get the same
- rewritten name for the private method.
+ The --private option can be used to stop other programs calling private
+ methods in your code by renaming anything beginning with a single underscore.
+ Beware that you should not use this if the generated file contains 'private'
+ methods that need to be accessible by other files. Also know that all the
+ files that access any particular private method must be compressed together so
+ they all get the same rewritten name for the private method.
EOS
author <<-EOS
Original JavaScript version by Dean Edwards, Ruby port by James Coglan <jcoglan@googlemail.com>
EOS
copyright <<-EOS
- Copyright (c) 2004-2008 Dean Edwards, James Coglan. This program is free software,
- distributed under the MIT license.
+ Copyright (c) 2004-2011 Dean Edwards, James Coglan. This program is free
+ software, distributed under the MIT license.
EOS
end
-begin; opts = spec.parse
-rescue Oyster::HelpRendered; exit
+begin
+ opts = spec.parse
+
+ inputs = opts[:unclaimed]
+ code = inputs.empty? ?
+ $stdin.read :
+ inputs.map { |f| File.read(f) }.join("\n")
+
+ $stdout.puts Packr.pack(code,
+ :shrink_vars => !!opts[:'shrink-vars'],
+ :protect => opts[:protect],
+ :private => !!opts[:private],
+ :base62 => !!opts[:base62])
+
+rescue Oyster::HelpRendered
end
-
-inputs = opts[:unclaimed]
-code = inputs.empty? ?
- $stdin.read :
- inputs.map { |f| File.read(f) }.join("\n")
-
-$stdout.puts Packr.pack(code,
- :shrink_vars => !!opts[:'shrink-vars'],
- :protect => opts[:protect],
- :private => !!opts[:private],
- :base62 => !!opts[:base62])
-