Объединение нескольких потоков src в gulp?
мне интересно, есть ли способ объединить эти две отдельные задачи в одну.
этой concat-js
задача требует, чтобы сгенерированный файл существовал до запуска. Задача cache-angular-templates
создает этот файл. Сгенерированный файл должен быть включен в concat
выход. После concat-js
готово, файл можно удалить-он больше не нужен.
кажется, что я должен каким-то образом быть в состоянии трубы в потоке, используемом в cache-angular-tempaltes
в потоке concat-js
использует.
gulp.task('concat-js', ['cache-angular-templates'], function () {
var concatOutputPath = path.dirname(paths.compiledScriptsFile),
concatOutputFileName = path.basename(paths.compiledScriptsFile),
jsFiles = [].concat(
paths.libScripts,
paths.appScripts,
paths.templateScriptFile,
notpath(paths.compiledScriptsFile),
notpath(paths.specMockScripts),
notpath(paths.specScripts)
);
return gulp
.src(jsFiles)
.pipe(buildTools.concat(concatOutputFileName))
.pipe(gulp.dest(concatOutputPath))
.on('end', function () {
del(paths.templateScriptFile);
})
;
});
gulp.task('cache-angular-templates', function () {
var cacheOutputPath = path.dirname(paths.templateScriptFile),
cacheOutputFileName = path.basename(paths.templateScriptFile);
var options = {
root: '/' + cacheOutputPath,
standalone: true,
filename: cacheOutputFileName
};
return gulp
.src(paths.templates)
.pipe(buildTools.angularTemplatecache(options))
.pipe(gulp.dest(cacheOutputPath))
;
});
1 ответов
действительно, Вы должны объединить их, так как одна из идей Gulp заключается в устранении промежуточно-временных файлов.
один из способов достичь этого:
- преобразование
cache-angular-templates
для функции, возвращающей поток шаблонов, назовем егоgetTemplateStream
; - удаление
.pipe(gulp.dest(cacheOutputPath))
от нее; - используя
event-stream
для объединения потоков перед их объединением в основной задаче. Вашей главной задачей станет что-то вроде это:
var es = require('event-stream');
gulp.task('concat-js', function () {
var concatOutputPath = path.dirname(paths.compiledScriptsFile),
concatOutputFileName = path.basename(paths.compiledScriptsFile),
jsFiles = [].concat(
paths.libScripts,
paths.appScripts,
notpath(paths.compiledScriptsFile),
notpath(paths.specMockScripts),
notpath(paths.specScripts)
);
return es.merge(gulp.src(jsFiles), getTemplateStream())
.pipe(buildTools.concat(concatOutputFileName))
.pipe(gulp.dest(concatOutputPath));
});
function getTemplateStream() {
var options = {
root: '/' + cacheOutputPath,
standalone: true,
filename: cacheOutputFileName
};
return gulp
.src(paths.templates)
.pipe(buildTools.angularTemplatecache(options));
}
делая это, вы объединяете два потока и выходной файл вашего getTemplateStream
будет отправлено вниз по трубе.