46
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

gulp-cliはインストールすべきじゃないと、思うよ

Last updated at Posted at 2016-06-06

プロジェクトでGulpを使用したい場合、グローバルにはgulp-cli、プロジェクトローカルにはgulpを入れなければならず、以下の2つのコマンドを打つことになります。

$ npm install gulp-cli -g
$ npm install gulp --save-dev

ここにおじさんは疑問をいだいてしまいました。

グローバルにインストールしてしまっていいのか? :confounded:

そうです。__問題はnpm install gulp-cli -gです。__先のやり方はGulp公式が推奨している方法であり、「gulp入門」と検索すれば同じ方法を紹介している記事が多くヒットするので一般的な方法であるのは間違いないです。しかし、この方法はタブーを犯しています。

何がタブーなのか? :hushed:

__-gを使ってインストールするnpmモジュールは個々のプロジェクトが依存することの無い疎な状態であるべき__だと私は考えます。もっと具体的に言うと、ローカルモジュールの実行の為にグローバルモジュールを実行するのは問題であると言えます。これはnpmモジュール全てに言えると思います。

どういった問題が起こるか? :fearful:

gulp-cliをグローバルにインストールしてしまうと、同じプロジェクトでも開発者によってgulp-cliのバージョンが違う場合が考えられます。gulp-cliは複数のバージョンに対応できる作りになっているものの、本当に大きな仕様変更が無いとは言い切れません。そうなれば今まで正常に動作していたプロジェクトも動かなくなりかねません。

じゃあどうしたらいいのよ? :cold_sweat:

gulp-cliのインストールをやめましょう。gulp-cliの主な機能はnode_modules配下のgulpコマンドへパスを通すことです。そんなことはわざわざgulp-cliを経由せずとも、もともと__npm-scriptsが同じ事をしてくれてるじゃあありませんか。__

gulpfile.js
var gulp = require('gulp');

gulp.task('hoge', function() {
  console.info('ほげほげ!!');
});

例えば、こんなgulpfile.jsがあったとしたら、

package.json
{
  "scripts": {
    "hoge": "gulp hoge"
  }
}

こんな感じでnpm-scriptsを追加すれば、gulpfile.jsに書いたhogeタスクを実行できます。

$ npm run hoge
// => "ほげほげ!!"

これでプロジェクトが__グローバルを犯すことのない疎な構造が出来上がりました!__やったね:bow:

npm-scriptsの詳しい使い方については「Node.jsユーザーなら押さえておきたいnpm-scriptsのタスク実行方法まとめ」で解説しているのでご参考ください。

最後に :speech_balloon:

とは言ったものの少数派の意見なのでGulpの公式に屈服せざるおえない状況の方が多いと思います。是非皆さんのプライベートなプロジェクトなんかで試してみてください。

46
39
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?