LoginSignup
3
3

More than 5 years have passed since last update.

gruntから徐々にgulpを使っていきたい時など

シナリオ
gulpでないと面倒な事象に行き当たり、どうしてもgruntからgulpに
乗り換える必要がでてきた。
しかしgruntファイルが肥大化しているので、全部書き換えるのも面倒だ。

最初はGruntfileの他にgulpfileも用意して併用すればいいかと考えたが、
gruntのタスクABCとgulpのタスクXYZを一緒に使いたかった。

この場合

  1. grunt内でgulpを呼び出す
  2. gulp内でgruntを呼び出す

の2択があるが、既存のフローがgruntだという理由で今回は1を選択。

grunt内でgulpを呼び出す

gulpfile側は

gulpfile.coffee
gulp = require 'gulp'

gulp.task 'ABC', ->
    # do something

module.exports = gulp # ここだけ追加!

Gruntfile側は

Gruntfile.coffee
require('coffee-script/register') # 最新のCoffeeScript使いたい

module.exports = (grunt) ->

    grunt.registerTask 'gulp-ABC', ->

        require('./gulpfile').start('ABC', @async())

    grunt.registerTask 'ABC-XYZ',   ['gulp-ABC', 'XYZ'] # XYZはどこかに定義されてる別タスク

もちろん.coffeeでなく.jsでもいい。

解説

gulpはgulp.start()で呼び出せるので、requireした後それを呼んであげればよい。
requireできるようにexportsすればそれでOK。

@async()は、gruntタスク終了時のコールバック関数を返すもの。
これをgulp.start()の最後の引数に渡すと、gulpタスク終了時にこの関数が実行されてうまい具合にいく。

require('coffee-script/register')は、
CoffeeScriptでGruntfileを書いてるとき限定の話で、そうでなければ無視していただいてOKだが、
小話として聞いてほしい。

gruntのcoffeescriptが古すぎる問題というのがあって、これのせいで、

gulp.src './xxx'
    .pipe yyy()

このメソッドチェーンができない。
なのでgruntコマンドからrequire('./gulpfile')したときのrequireを、
新しいCoffeeScriptのrequireにしてあげないといけない、という理由で
require('coffee-script/register')と書いた。

ログを出す

ログを出す部分のコードはgulpの bin/gulp.jsに書かれているので、上記の方法だと厳しい。
それはしょうがないとしよう。

3
3
0

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
3
3