Gulp изменить рабочий каталог для всей задачи
Я работаю над файлом gulp, который содержит задачи как для интерфейса, так и для бэкэнда моего сайта.
Задача ниже, например, приведет к сжатию моих скриптов в 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)
Как вы можете видеть, я создал помощника для обеспечения правильного интерфейса:
frontendPath = (dirs...) -> path.join.apply null, ['frontend'].concat(dirs)
Но я должен быть очень осторожным, чтобы все шаги моей задачи (особенно .src и .dest) выполнялись в папке с интерфейсом.
Я знаю, что вы можете использовать параметр { cwd: 'frontend' }
для изменения рабочего каталога для .src и .dest. Но есть ли способ изменить весь рабочий каталог для задачи?
Ответы
Ответ 1
Используйте process.chdir
, чтобы изменить рабочий каталог. Мы можем внести изменения в любой файл gulpfile или в вашу ситуацию, изменить его в рамках задачи.
gulp.task('frontend', function(){
process.chdir('...');
gulp.src(...)
});
gulp.task('backend', function(){
process.chdir('...');
gulp.src(...)
});
Убедитесь, что используется последняя версия gulp,
эта функция кажется добавлена недавно.
Ответ 2
С тем, как работает gulp, нет смысла "менять каталоги" в шагах между src
и dest
.
gulp.src
считывает файлы с диска в память. Затем .pipe
просто передает содержимое этих файлов (и метаданные, связанные с файлами), см. Vinyl file objects для получения дополнительной информации) к другому javascript функции, каждый из которых просто работает с версиями файла в памяти. Это означает, что они не знают о рабочем каталоге или заботятся об одном. Они просто видят, что входящие данные о файлах поступают через канал, делают данные для этих данных и отправляют их через следующий .pipe
.
Итак, я думаю, что если вы действительно параноик о том, чтобы быть в родительском директоре, cwd
to src и dest - это лучшее, что вы можете сделать.
Все, что можно сказать, вы можете посмотреть shelljs, что позволяет изменять каталоги для текущего процесса node. Я думаю, что это может считаться анти-паттерном, когда дело обходит вокруг, но может стоить выстрела.