タグ: npm

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

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

    $ 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 をビルドしたりいろいろ便利なことが出来るので面白いですよー。

    参考: npm で依存もタスクも一元化する – Qiita

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