# 別に $ npm install -g gulp しなくても大丈夫って話。

- リンク: https://torounit.com/blog/not-need-global-gulp/
- 公開日: 2016-06-06T17:05:35+09:00
- 作成者: Toro\_Unit

```decode:true
    $ npm install -g gulp-cli
    ```

みたいにグローバルにモジュールをインストールさせる風潮ってどうなんだよ！みたいな
話をしてまして。

僕自身もいろいろそれには非常に違和感を持っていたり、そもそも node.js のバージョン
を変更したときとか、グローバルに入っているモジュールの面倒も見ないといけないこと
が非常に面倒くさいんですよね。grunt-cli も gulp-cli も bower も入れたくないし、可能
な限りプロジェクトの node_modules で完結させたいんですよね。バージョンアップとかも
面倒ですし。

そんなわけで、いろいろ試してみたんですが、

    ```decode:true
    $ ./node_modules/.bin/gulp hoge
    ```

とかやるのは、実際面倒くさいし、現在のディレクトリの位置次第で変わったり。

    ```decode:true
    $ $(npm bin)/gulp hoge
    ```

とかやるのも最初の奴よりはマシですが、面倒。bashrcとかを使って、./node_modules/.
bin にパスを・・・というのは流石に論外。Windows の人はどうすんねんとか言い出すと
キリは無いわけで。

というわけでいろいろ試してみたんですが、どうやら npm 2系以上からは、npm scripts 
にサブコマンドを渡せるようになっていたようです。だいぶ前から出来たんですね…

つまりどういうことかというと、package.json の “scripts” のところに、以下のように
書いておきます。

    ```decode:true
    {
      "scripts": {
        "gulp": "gulp"
      }
    }
    ```

そうすると、以下のコマンドで gulp を走らせることが出来ます。

    ```decode:true
    $ npm run gulp
    ```

そして、それに加えて、gulp で定義したサブコマンドなども渡せるようです。

    ```decode:true
    $ npm run gulp build
    ```

grunt 等の他のタスクランナーなどでも同等のことは出来るはずです。これで面倒くさい
グローバルなモジュールの管理をしなくて済みますね!!! バージョンの不整合などに悩まさ
れる心配も無さそうです。

とりあえず、gulp をお使いの皆さんは今すぐ package.json に1行足しましょう。

npm scripts を使うと、npm install したあとに勝手に CSS や JS をビルドしたりいろいろ
便利なことが出来るので面白いですよー。

参考： [npm で依存もタスクも一元化する – Qiita](http://qiita.com/Jxck_/items/efaff21b977ddc782971)

コメント欄の議論も含めてなかなか濃いですね。
