プロジェクトでGulpを使用したい場合、グローバルにはgulp-cli
、プロジェクトローカルにはgulp
を入れなければならず、以下の2つのコマンドを打つことになります。
$ npm install gulp-cli -g
$ npm install gulp --save-dev
ここにおじさんは疑問をいだいてしまいました。
グローバルにインストールしてしまっていいのか?
そうです。__問題はnpm install gulp-cli -g
です。__先のやり方はGulp公式が推奨している方法であり、「gulp入門」と検索すれば同じ方法を紹介している記事が多くヒットするので一般的な方法であるのは間違いないです。しかし、この方法はタブーを犯しています。
何がタブーなのか?
__-g
を使ってインストールするnpmモジュールは個々のプロジェクトが依存することの無い疎な状態であるべき__だと私は考えます。もっと具体的に言うと、ローカルモジュールの実行の為にグローバルモジュールを実行するのは問題であると言えます。これはnpmモジュール全てに言えると思います。
どういった問題が起こるか?
gulp-cli
をグローバルにインストールしてしまうと、同じプロジェクトでも開発者によってgulp-cli
のバージョンが違う場合が考えられます。gulp-cli
は複数のバージョンに対応できる作りになっているものの、本当に大きな仕様変更が無いとは言い切れません。そうなれば今まで正常に動作していたプロジェクトも動かなくなりかねません。
じゃあどうしたらいいのよ?
gulp-cli
のインストールをやめましょう。gulp-cli
の主な機能はnode_modules
配下のgulp
コマンドへパスを通すことです。そんなことはわざわざgulp-cli
を経由せずとも、もともと__npm-scriptsが同じ事をしてくれてるじゃあありませんか。__
var gulp = require('gulp');
gulp.task('hoge', function() {
console.info('ほげほげ!!');
});
例えば、こんなgulpfile.js
があったとしたら、
{
"scripts": {
"hoge": "gulp hoge"
}
}
こんな感じでnpm-scriptsを追加すれば、gulpfile.js
に書いたhoge
タスクを実行できます。
$ npm run hoge
// => "ほげほげ!!"
これでプロジェクトが__グローバルを犯すことのない疎な構造が出来上がりました!__やったね
npm-scriptsの詳しい使い方については「Node.jsユーザーなら押さえておきたいnpm-scriptsのタスク実行方法まとめ」で解説しているのでご参考ください。
最後に
とは言ったものの少数派の意見なのでGulpの公式に屈服せざるおえない状況の方が多いと思います。是非皆さんのプライベートなプロジェクトなんかで試してみてください。