Объединение нескольких потоков 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 заключается в устранении промежуточно-временных файлов.

один из способов достичь этого:

  1. преобразование cache-angular-templates для функции, возвращающей поток шаблонов, назовем его getTemplateStream;
  2. удаление .pipe(gulp.dest(cacheOutputPath)) от нее;
  3. используя 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 будет отправлено вниз по трубе.