こんにちは。
フロントエンドエンジニアをやっている、やぎといいます。
みなさま、納品時にJavascriptやCSSの圧縮作業(minify)やっていますか?
圧縮を行う理由としては色々あるでしょうが、
– ファイルサイズの軽量化
– ファイルの難読化
が主に挙げられると思います。
ただ、その圧縮に関する処理は外部パッケージ任せだったりして、実際問題として更新した箇所のみ反映しつつ圧縮されているのか気になるところだったりします。
そこで今回、圧縮されたJavascript・CSSファイルの差分情報を確認する方法についてご紹介したいと思います。
前提条件としてgitリポジトリ内で行っています。
なお、こちらのサイトを参考にさせていただきました。
js-beautifyのインストール
まずは、js-beautifyをインストールします。
js-beautifyは、難読化されたファイルを整形してくれるパッケージです。
1 |
npm install js-beautify --save |
or
1 |
yarn add js-beautify --dev |
gitの環境設定
次に、使用するリポジトリ上で以下のgit設定を追加します。
1 2 |
git config --global diff.minjs.textconv js-beautify git config --global diff.minjs.cachetextconv true |
ここでは、”minjs”という名前でテキスト変換としてjs-beautifyをフィルタとして登録しています。
.gitattributesの追加
公開(納品)用ディレクトリ内に、”.gitattributes”ファイルを作成します。
そのファイルには下記内容を記述します。
*.js diff=min
*.css diff=min
git属性のファイルに、先ほど登録した”minjs”のdiff対象をjs, cssファイルにしています。
これで、先のgit設定を当該ディレクトリ内に対し適用できました。
それでは、コミット間の差分をgit diffでとってみると、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$ git diff diff --git a/_dev/assets/css/object/component/_header.css b/_dev/assets/css/object/component/_header.css index a0cd9b8..c49ab15 100644 --- a/_dev/assets/css/object/component/_header.css +++ b/_dev/assets/css/object/component/_header.css @@ -1,3 +1,3 @@ .c-header{ - + background: #ff0; } \ No newline at end of file diff --git a/_dev/assets/css/object/component/_main.css b/_dev/assets/css/object/component/_main.css index 2303020..5ad7b20 100644 --- a/_dev/assets/css/object/component/_main.css +++ b/_dev/assets/css/object/component/_main.css @@ -1,3 +1,3 @@ .c-footer{ - + font-size: 14px; } \ No newline at end of file diff --git a/_dev/assets/js/src/GoodBye.js b/_dev/assets/js/src/GoodBye.js index b4aedae..1f622d9 100644 --- a/_dev/assets/js/src/GoodBye.js +++ b/_dev/assets/js/src/GoodBye.js @@ -9,7 +9,6 @@ class GoodBye{ } sayGoodBye(name){ console.log(`Hi, GoodBye ${name}.`); - console.log(`See you tomorrow.`); } } |
とこういう感じで、難読化されたファイルを整形化しつつ差分結果が表示されました。
ただ、git diffを実行しないとわからない、diffを取り損ねる場合もあるため、
package.jsonのscriptsに、圧縮実行後にログファイルを出力する処理を追加してみました。
1 2 3 4 5 |
"scripts": { ... "publish:js": "webpack --config webpack/webpack.pub.js && mkdir -p log && git diff --color > ./log/diff.`date '+%Y%m%d_%H%M%S'`", ... }, |
“npm run publish:js”を実行すると、webpackでコンパイル及び圧縮を行った後、ログファイルを格納するlogディレクトリを作成。
そこにgit diffで出た結果を”dif.YYYYMMDD_HHMMSS(日付形式)”というファイル名でlogディレクトリ内に出力させています。
これで圧縮後の差分ログとして見返すこともできますね!