Run external gulpfiles as part of a gulp task inside another gulpfile


gulp-chug is non-modifying, i.e., gulp-chug will return the same stream it receives. See Use with other plugins for an example.

Requires node >= 0.10

Inspired by shama‘s grunt-hub.

Note: This plugin has been blacklisted, however I have yet to find an example of a pattern that allows for the execution of child gulpfiles without task name collisions. If you have an example, let me know!

Install

Install with npm:

npm install gulp-chug

Usage

Run external gulpfiles

Run one external gulpfile:

var gulp = require( gulp );
var chug = require( gulp-chug );
 
gulp.task( default, function () {
    gulp.src( ./subproj/gulpfile.js )
        .pipe( chug() )
} );

Run multiple external gulpfiles:

var gulp = require( gulp );
var chug = require( gulp-chug );
 
gulp.task( default, function () {
 
    // Find and run all gulpfiles under all subdirectories 
    gulp.src( ./**/gulpfile.js )
        .pipe( chug() )
} );

Use with other plugins

grunt-chug will not modify streams passed to it, but will happily accept streams modified by other plugins:

var gulp = require( gulp );
var chug = require( gulp-chug );
var replace = require( gulp-replace );
 
gulp.task( default, function () {
    gulp.src( ./subproj/gulpfile.js )
 
        // Transform stream with gulp-replace 
        .pipe( replace( Hello, Goodbye ) )
 
        // Run modified stream with gulp-chug 
        .pipe( chug() )
} );

Make gulp-chug faster by ignoring file contents

If gulp-chug is the only plugin in the stream, there’s no need to actually read the contents of the gulpfiles. Set { read: false } in gulp.src to speed things up:

var gulp = require( gulp );
var chug = require( gulp-chug );
 
gulp.task( default, function () {
    gulp.src( ./subproj/gulpfile.js, { read: false } )
        .pipe( chug() )
} );

Options

Gulp chug supports several options, all of which are optional, e.g.,

var gulp = require( gulp );
var chug = require( gulp-chug );
 
gulp.task( default, function () {
    gulp.src( ./subproj/gulpfile.js )
        .pipe( chug( {
            nodeCmd: node,
            tasks:  [ default ],
            args:   [ –my-arg-1, –my-arg-2 ]
        } ) );
} );

tasks

The tasks to run from each gulpfile. Default is default.

chug( {
    tasks: [ my-task-1, my-task-2 ]
} )

nodeCmd

The node command to spawn when running gulpfiles. Default is node.

chug( {
    nodeCmd: ./my-node-bin
} )

args

Additional command-line arguments to pass to each spawned process. Default is none.

chug( {
    args: [ –my-arg-1, –my-arg-2 ]
} )

Callback

You can pass a callback function to gulp chug that will be executed after the external gulpfile has finished running.

var gulp = require( gulp );
var chug = require( gulp-chug );
 
gulp.task( default, function () {
 
    gulp.src( ./subproj/gulpfile.js )
        .pipe( chug( function () {
            console.log( Done );
        } ) )
} );

In combination with gulp-chug options:

var gulp = require( gulp );
var chug = require( gulp-chug );
 
gulp.task( default, function () {
 
    gulp.src( ./subproj/gulpfile.js )
        .pipe( chug( {
            tasks: [ my-task-1, my-task-2 ]
        }, function () {
            console.log( Done );
        } ) )
} );

See also

  • gulp-hub – Load tasks from other gulpfiles
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s