Gulp change working directory for entire task

Zyphrax picture Zyphrax · Oct 11, 2014 · Viewed 19.4k times · Source

I'm working on a gulp file that contains tasks for both the frontend and the backend of my site.
The task below for example will concat my scripts into app.js:

gulp.task 'frontend:scripts', ->
    gulp.src frontendPath(scriptsFolder, scriptsPattern)
        .pipe sourcemaps.init()
        .pipe coffee()
        .pipe concat 'app.js'
        .pipe sourcemaps.write('.')
        .pipe gulp.dest frontendPath(tempFolder, scriptsFolder)

As you can see I've created a helper to provide the correct frontend path:

frontendPath = (dirs...) -> path.join.apply null, ['frontend'].concat(dirs)

But I have to be really careful that all the steps of my task (especially .src and .dest) are executed in the frontend folder.

I know that you can use the { cwd: 'frontend' } option to change the working directory for .src and .dest. But is there a way to change the whole working directory for a task?

Answer

gfaceless picture gfaceless · Jan 22, 2015

Use process.chdir to change the working directory. We can make the change anywhere in a gulpfile, or in your situation, change it within a task.

gulp.task('frontend', function(){
  process.chdir('...');
  gulp.src(...)
});

gulp.task('backend', function(){
  process.chdir('...');
  gulp.src(...)
});

Make sure using the latest version of gulp, this feature seems to be added recently.