gulp、そしてgulpで利用するパッケージだけで、かなりディレクトリ容量が膨らむ。
これをgitで共有するのは嫌だなあと思って試行錯誤。
とりあえず、グローバルとローカルの両方にgulpをインストールするのではなく、グローバルだけにできないかと思ったが、逆(
ローカルのみインストールする)はあっても、グローバルのみで動かす設定は発見できず。
gulp.jsのフローを見る限り、ローカルへのインストールは必須のようだし。
if (!env.modulePath) {
gutil.log(
chalk.red('Local gulp not found in'),
chalk.magenta(tildify(env.cwd))
);
gutil.log(chalk.red('Try running: npm install gulp'));
process.exit(1);
}
このフローの通り、ローカルにgulpがインストールされていないと、gulpの実行はできない。
[13:20:52] Local gulp not found in ~/git/プロジェクト名
[13:20:52] Try running: npm install gulp
gulpが、グローバルとローカルとの、両方でインストールが必須なのには構造的な理由がある。
グローバルにインストールされたgulpは、ローカルにインストールされたgulpを実行するためのもの。このグローバルとローカルの2つのモジュールの中身は完全に同じもので、まったく同じモジュールをグローバルとローカルにインストールすることになる。
gulpコマンドが実行されると、gulp.jsのrequireで、ローカルのgulpがインポートされる。
そして、実際の処理(gulpfile.jsに書かれたタスク)はrequireされたローカルのgulpモジュールが全て行う。つまり、gulpは、自分自身が自分自身と同じモジュールをrequireして使うという仕組みで動いている。
では、ローカルへのインストールは仕方がないとしても、gitで共有したくない問題はどうにかできないかと思ったら、
gitなどでプロジェクト共有している場合、この node_modules を共有していると結構重かったりしますし、 package.json が共有されていたらあとで $ npm install をしたら必要なものが入ってくるため、 node_modules のディレクトリの共有は不要です。
Node.js 製の タスクランナー gulp.js を使ってみる - HAM MEDIA MEMO
ハッ!その手があったか!思わずポンと手を打ってしまった。
.gitignoreでnode_modulesをignoreすればいいじゃないですか。
gitからクローンした際は、npm installすればパッケージはインストールされるんだし。
ですよねぇ。これって常識だったのかしら。
追記
.gitignoreのサンプルは以下。一行だけだけれど。
/node_modules/
上記内容をプロジェクト直下にファイル名「.gitignore」で保存。
「node_modules」の前の/で、プロジェクトと同階層であることを明示。
「node_modules」の後の/で、ディレクトリであることを明示。
つまり、「/node_modules/」で、プロジェクト直下のnode_modulesディレクトリを無視する、という設定になる。