$ npm install -g gulp-cli
みたいにグローバルにモジュールをインストールさせる風潮ってどうなんだよ!みたいな話をしてまして。
僕自身もいろいろそれには非常に違和感を持っていたり、そもそも node.js のバージョンを変更したときとか、グローバルに入っているモジュールの面倒も見ないといけないことが非常に面倒くさいんですよね。grunt-cli も gulp-cli も bower も入れたくないし、可能な限りプロジェクトの node_modules で完結させたいんですよね。バージョンアップとかも面倒ですし。
そんなわけで、いろいろ試してみたんですが、
$ ./node_modules/.bin/gulp hoge
とかやるのは、実際面倒くさいし、現在のディレクトリの位置次第で変わったり。
$ $(npm bin)/gulp hoge
とかやるのも最初の奴よりはマシですが、面倒。bashrcとかを使って、./node_modules/.bin にパスを・・・というのは流石に論外。Windows の人はどうすんねんとか言い出すとキリは無いわけで。
というわけでいろいろ試してみたんですが、どうやら npm 2系以上からは、npm scripts にサブコマンドを渡せるようになっていたようです。だいぶ前から出来たんですね…
つまりどういうことかというと、package.json の “scripts” のところに、以下のように書いておきます。
{ "scripts": { "gulp": "gulp" } }
そうすると、以下のコマンドで gulp を走らせることが出来ます。
$ npm run gulp
そして、それに加えて、gulp で定義したサブコマンドなども渡せるようです。
$ npm run gulp build
grunt 等の他のタスクランナーなどでも同等のことは出来るはずです。これで面倒くさいグローバルなモジュールの管理をしなくて済みますね!!! バージョンの不整合などに悩まされる心配も無さそうです。
とりあえず、gulp をお使いの皆さんは今すぐ package.json に1行足しましょう。
npm scripts を使うと、npm install したあとに勝手に CSS や JS をビルドしたりいろいろ便利なことが出来るので面白いですよー。
コメント欄の議論も含めてなかなか濃いですね。