読者です 読者をやめる 読者になる 読者になる

like life lives

技術以外のことに興味が寄りすぎな技術ブログ

バッチファイルで自動でJavascriptファイルを圧縮する

Ajax Minifierを使ってJavascriptを圧縮するとサイトの通信量をかなり節約できますが、更新のたびにコマンドをいちいち打って圧縮するのは面倒です。

複数ファイルのjsファイルを使っているときなども結構な手間。

なのでコマンドはバッチファイル化して一発で全部のファイルを圧縮できるようにしてしまいましょう。


@echo off

echo %~dp0

setlocal enabledelayedexpansion
for /r "%~dp0/app/webroot/js" %%i in (*.js) do (

  set TDIR=%%~dpi
  set FILE_NAME=%%~ni
  set EXT_JS=%%~xi
  set EXT_MIN=!FILE_NAME:~-4!
  
  if NOT ".min"=="!EXT_MIN!" (
    ajaxminifier "%%i" -o "!TDIR!!FILE_NAME!.min.js"
  )
)
	
endlocal

pukkyuはWindows上でEclipseを使ってCakePHPで開発しています。

上のスクリプトをCakePHPのルートディレクトリに"ajax_comp.bat"などという名前で保存し、実行します。

すると、作成したjsファイルがすべて圧縮され、"jsファイル名.min.js"という名前で同じディレクトリの中に保存されます。

解説

@echo off

余計な文字列のダンプを抑制します。

setlocal enabledelayedexpansion

ループの中で変数を使いたい場合、この宣言が必要です。

for /r "%~dp0/app/webroot/js" %%i in (*.js) do (
…
)

バッチファイルがあるディレクトリは %~dp0 で取得できるので、自作jsファイルを保存してある app/webroot/js の下の.jsファイルを再帰的に検索してそれぞれに圧縮をかけます。

    ajaxminifier "%%i" -o "!TDIR!!FILE_NAME!.min.js"

Ajax Minifierを実行して .min.js を出力するコマンドです。

リリース環境だけ .min.js を適用したい

自動でJavascriptを圧縮できるようになりましたが、デバッグ環境でこの .min.js ファイルを読み込むようにしてしまうとブラウザ上でJavascriptデバッグができません。

次はリリース環境でのみ圧縮したjsファイルを読み込むように設定します。(次回)