コマンドラインで JSMin を使うときはリダイレクション指定を忘れずに

久しぶりに JSMin を使おうとしたら、止まったまま動作しない状況に陥ってしまったため、ここにまとめておきます。 プログラムがエラー表示を出してくれたら解決しやすかったのですが。

  • リダイレクションについて

Unix のコマンドにリダイレクション (>, >>, <) があります。

$ command  >  file    # command の出力を file に上書き
$ command  >>  file    # command の出力を file に追記
$ command <   file    # file の内容を command に入力

詳細:http://www.geocities.co.jp/geo_sunisland/input_output.html


JSMin 公式サイトの使用例は、< > で囲まれているのではなく、リダイレクションを使っていることに注意してください。

Example:

jsmin <fulljslint.js >jslint.js "(c)2002 Douglas Crockford"

# $ jsmin
#     <input.js
#         >output.js
#             ["著作権表記"]

つまり、<fulljslint.js > は省略可能という意味ではありません(ここで詰まっていました)。
このリダイレクションを指定し忘れると、プログラムが正常に終了しない状態になってしまいます。

  • 使い方

JSMin は、>output.js"著作権表記" を省略することができます。
以下にいくつかの実行パターンと結果を示します。


1. 入力ファイルだけを指定する場合

$ jsmin  <  input.js

# 標準出力(コマンドラインなど)
var is={ie:navigator.appName=='Microsoft Internet Explorer',java:navigator.javaEnabled(),ns:navigator.appName=='Netscape',ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform=='Win32'}
is.mac=is.ua.indexOf('mac')>=0;if(is.ua.indexOf('opera')>=0){is.ie=is.ns=false;is.opera=true;}
if(is.ua.indexOf('gecko')>=0){is.ie=is.ns=false;is.gecko=true;}

動作チェックや、プログラム上の変数に代入する場合に。
     


2. 入力ファイルを縮小化した内容の出力ファイルを作る場合

$ jsmin  <  input.js  >  output.js

# output.js を上書き保存

一般的な使い方。 output.js は存在しなければ自動的に作られる。
     


3. 入力ファイルを縮小化した内容を、あるファイルに追記する場合

$ jsmin  <  input.js  >>  output.js

# output.js に追記

複数の JavaScript ファイルを縮小した結果を一つのファイルにまとめたい時に。
     

Windows の場合は実行可能ファイル jsmin.exe が直接ダウンロードできます。
Unix 系 OS で JSMin を利用するためには、GCC 等のコンパイラで以下のように実行可能ファイルを作成する必要があります。

gcc -o jsmin jsmin.c    # jsmin.c から jsmin を生成する

cp jsmin /usr/local/bin/jsmin    # パスの通ったディレクトリに jsmin をインストールする

jsmin を直接実行してもいいですが、パスの通ったディレクトリに置いておけば何処からでも呼び出すことが可能になります。


JSMin 公式サイト:JSMin