画像の最適化をCLIだけで行うgrunt-imageを作った | 1000ch.netを読んで、grunt-imageを使わせて頂いているのですが、インストールに時間がかかるのが気になります。そこで、npm install -g grunt-image
でグローバルにインストールして使うのはどうかと検討してみました。以下、grunt-imageを例に記述します。
package.jsonに以下のコードを加えます。
"scripts": {
"postinstall": "npm link grunt-image"
},
これにより、npm install
が完了した際に、npm link grunt-image
が実行されます。グローバルにgrunt-imageが入っていれば、そこに対してシンボリックリンクが設定されます(すぐに完了します)。グローバルにgrunt-imageが入っていなければインストールが実行され、その後シンボリックリンクが設定されます。
devDependenciesやdependenciesにあるgrunt-imageは削除します。これにより、matchdepやload-grunt-tasksでタスクが読み込まれなくなるので、Gruntfile.coffeeへ個別に記述することにします。
grunt.loadNpmTasks 'grunt-image'
grunt image
を実行すると、ローカルにインストールした場合と同様の動作をしてタスクが完了しました。
グローバルのgrunt-imageアップデートすると全プロジェクトに影響が出ますが、画像を最適化するだけなのでそれほど問題ないかなという判断。devDependenciesやdependenciesに記述が無くなるのが問題かな。あと、グローバルにgrunt-xxxが入る不快感?みたいなものが...。でも完璧はないわけだし。
ちなみに、postinstall
等で複数のコマンドを実行する場合は、lastboy/package-scriptを使うと良さそう。