grunt-image / gulp-imageをグローバルにインストールする試み

公開

画像の最適化を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は削除します。これにより、matchdepload-grunt-tasksでタスクが読み込まれなくなるので、Gruntfile.coffeeへ個別に記述することにします。

grunt.loadNpmTasks 'grunt-image'

grunt imageを実行すると、ローカルにインストールした場合と同様の動作をしてタスクが完了しました。

グローバルのgrunt-imageアップデートすると全プロジェクトに影響が出ますが、画像を最適化するだけなのでそれほど問題ないかなという判断。devDependenciesやdependenciesに記述が無くなるのが問題かな。あと、グローバルにgrunt-xxxが入る不快感?みたいなものが...。でも完璧はないわけだし。

ちなみに、postinstall等で複数のコマンドを実行する場合は、lastboy/package-scriptを使うと良さそう。