Npm-Run-All で複数の npm-scripts を実行・OS 環境に関わらず rm -rf する
前回の記事で、npm-scripts を使った CSS の圧縮処理を紹介した。
今回は、この npm-scripts をさらに便利なものにするパッケージを2つ紹介する。
複数のタスクを一括実行したい
そもそもぼくが今回 npm-scripts で CSS を圧縮したいのは、ぼくが運営しているはてなブログのカスタムテーマを圧縮するためだった。
ぼくは3つのはてブロを運営しているので、圧縮したい CSS ファイルは3つある。
今のところ、3つのブログでデザインはそれぞれ違えど、不具合を修正するときは3つとも同時に直している。つまり、3ファイルの CSS 圧縮を一括してやりたいことが多いのだ。
そこで登場するのが npm-run-all
というパッケージ。これを使うと複数のタスクを一括して呼び出せるようになる。
# npm-run-all をローカルインストール
$ npm install -D npm-run-all
package.json
には以下のようにタスクを記述。
"scripts": {
"min": "npm-run-all min:*",
"min:corredor": "cleancss -c ie7 -f 'breaks:afterComment=on' -d -o dist/css/Corredor.min.css src/css/Corredor.css",
"min:murga": "cleancss -c ie7 -f 'breaks:afterComment=on' -d -o dist/css/Murga.min.css src/css/Murga.css",
"min:elmylar": "cleancss -c ie7 -f 'breaks:afterComment=on' -d -o dist/css/ElMylar.min.css src/css/ElMylar.css"
}
「min:corredor」「min:murga」「min:elmylar」は、いずれも1ファイルずつ Clean-CSS-CLI で CSS を圧縮するタスク。そしてこの3つのタスクを一括呼び出すのが「min」タスクになる。
「min」タスクは npm-run-all の機能で、アスタリスクによるパターンマッチ指定をしている。これで「min:」から始まるタスク全てを呼べるのである。
# 「min:corredor」「min:murga」「min:elmylar」タスクを一括実行する
$ npm run min
dist ディレクトリ配下を削除しておきたい
結果ファイルを出力する dist/css/
ディレクトリ配下を一旦まっさらにしてから Clean-CSS を実行した方が、何となく気分が良いだろう。
だが、npm-scripts に実行 OS に依存するようなコマンドを書いてしまうと、Windows でしか実行できないとか、Windows では実行できないとかいう問題が起こったりする。
ディレクトリ内のファイル全削除のコマンドは、Windows では rd /s
、Mac OSX や Linux では rm -rf
とコマンドや動作が異なる。
そこで、クロスプラットフォームで rm -rf
を実現できる npm パッケージである rimraf
を使ってやる。
# rimraf をローカルインストール
$ npm install -D rimraf
package.json
を先程の例から以下のように変更する。
"scripts": {
"clean": "rimraf ./dist/css/*",
"min": "npm-run-all clean min:*",
"min:corredor": "cleancss -c ie7 -f 'breaks:afterComment=on' -d -o dist/css/Corredor.min.css src/css/Corredor.css",
"min:murga": "cleancss -c ie7 -f 'breaks:afterComment=on' -d -o dist/css/Murga.min.css src/css/Murga.css",
"min:elmylar": "cleancss -c ie7 -f 'breaks:afterComment=on' -d -o dist/css/ElMylar.min.css src/css/ElMylar.css"
}
追加した clean
タスクで rimraf
を使っており、これが ./dist/css/
配下のファイル・ディレクトリを全て削除している (ゴミ箱ではなく削除)。rimraf
は対象のディレクトリが存在しなくても失敗にはならない。
また、min
タスクにも clean
タスクを呼び出すよう追加してある。これで、結果ディレクトリのお掃除と再ビルドが1つのコマンドでできるようになった。
# clean タスクを呼んだあと、各種 min: タスクを一括実行する
$ npm run min
- 参考 : WIP npm-scripts を使い倒そう! - Qiita
- 参考 : npm-scripts で使える便利モジュールたち - Qiita
- 参考 : cpx と rimraf を試す – アカベコマイリ
はてなブログのカスタムテーマは GitHub 管理しています
このようにして作成した開発環境、および本ブログを始めとするはてブロのカスタムテーマ CSS は、以下の GitHub リポジトリで管理している。
圧縮した CSS ファイルをそのまま外部ファイルとして読み込むことはせず、「デザイン設定」画面から「カスタム CSS」として都度コピペしてインラインにぶち込むようにしているので、CSS の製作中は Watch したりする必要がなく、書き終わってから一度 npm run
してやればよかったので、このような構成になっている。
blog.css
のスタイルをカスケードして、人力でも最小限のスタイルしていになるよう書いてきたが、コメントや改行を減らすだけで半分くらいのサイズになるので、CSS の Minify も侮れん。