2015-06-27 2 views
1

Я пытаюсь объединить два источника глотком следующим образом:Объединение двух потоков глотка

gulp.task("build", ["clean"], function() { 

    var sb = gulp.src([ 
    paths.bower + "jquery/jquery.js", 
    paths.bower + "angular/angular.js" 
    ]) 
    .pipe(flatten()) 
    .pipe(gulp.dest(paths.scripts.vnd)); 

var sm = gulp.src([ 
    paths.scripts.vnd + "jquery.js", 
    paths.scripts.vnd + "angular.js" 
]) 
    .pipe(concat("app.js")) 
    .pipe(gulp.dest(paths.scripts.dst)) 
    .pipe(rename("app.min.js")) 
    .pipe(uglify()) 
    .pipe(gulp.dest(paths.scripts.dst)); 

    return merge(sb, sm); 

}); 

Как-то только первый из них выполняется.

Однако, если перенести второй на другую задачу с зависимостью от сборки, то оба выполняются ...

Я делаю слияние неправильный путь?

UPDATE 1

Я обновил свою задачу построить как МЕНЬШЕ файлы и JS файлы, так у меня есть:

var 
    gulp = require("gulp"), 
    fs = require("fs"), 
    merge = require("merge2"), 
    concat = require("gulp-concat"), 
    flatten = require("gulp-flatten"), 
    less = require('gulp-less'), 
    minify = require('gulp-minify-css'), 
    rename = require("gulp-rename"), 
    rimraf = require("gulp-rimraf"), 
    uglify = require("gulp-uglify"); 

var paths = { 
    bower: "./bower_components/", 
    scripts: { 
    app: "./" + "/scripts/app/", 
    dst: "./" + "/scripts/dst/", 
    vnd: "./" + "/scripts/vnd/" 
    }, 
    styles: { 
    app: "./" + project.webroot + "/styles/app/", 
    dst: "./" + project.webroot + "/styles/dst/" 
    } 
}; 

gulp.task("build", function() { 

    var sbm = gulp.src([ 
    paths.styles.app + "*.less", 
    paths.styles.vnd + "*.less" 
    ]) 
    .pipe(less()) 
    .pipe(minify()) 
    .pipe(concat("app.css")) 
    .pipe(gulp.dest(paths.styles.dst)) 
    .pipe(rename("app.min.css")) 
    .pipe(gulp.dest(paths.styles.dst)); 

    var scb = gulp.src(
    [ 
     paths.bower + "jquery/jquery.js", 
     paths.bower + "angular/angular.js" 
    ]) 
    .pipe(flatten()) 
    .pipe(gulp.dest(paths.scripts.vnd)); 

    var scm = gulp.src(
    [ 
     paths.scripts.vnd + "jquery.js", 
     paths.scripts.vnd + "angular.js" 
    ]) 
    .pipe(concat("app.js")) 
    .pipe(gulp.dest(paths.scripts.dst)) 

    return merge(sbm, scb, scm); 

}); 

Так или иначе, это выполняется только SBM ... Кто-нибудь знает, почему?

Я также попытался @ предложение TopLeft, но при включении в LESS задач в конце концов app.min.js файл прибудете это меньше кода в нем ...

+0

это в документации, смотрите следующий [рецепт ] (https://github.com/gulpjs/gulp/blob/master/doc s/recipes/using-multiple-sources-in-one-task.md) –

+0

Я последовал этому. Разве это не то, что я делаю в своем коде? –

ответ

5

попробовать это с merge2 плагин, вот как я это делаю

var merge = require('merge2'); 

gulp.task("build", ["clean"], function() { 
    var sb = gulp.src([ 
    paths.bower + "jquery/jquery.js", 
    paths.bower + "angular/angular.js" 
    ]) 
    .pipe(flatten()) 
    .pipe(gulp.dest(paths.scripts.vnd)); 

var sm = gulp.src([ 
    paths.scripts.vnd + "jquery.js", 
    paths.scripts.vnd + "angular.js" 
]) 

    return merge(sb, sm) 
    .pipe(concat("app.js")) 
    .pipe(gulp.dest(paths.scripts.dst)) 
    .pipe(rename("app.min.js")) 
    .pipe(uglify()) 
    .pipe(gulp.dest(paths.scripts.dst)); 

}); 

в качестве примера, вот как я сливаю два моих МЕНЬШЕ потоки: (один unCSS'ed, а другой нет)

/* ===== LESS START ===== */ 
gulp.task('less', function() { 
    // Get static styles 
    var streamMain = gulp.src([ 
     srcAssets + '/less/**/*.less', 
     srcAssets + '!/less/**/interactive.less',]) 
     // Convert to CSS 
     .pipe(less()) 
     // Remove unused CSS rules 
     .pipe(uncss({ 
      html: [dest + '/index.html'] 
     })) 

    // Get dynamic styles 
    var streamEvents = gulp.src(srcAssets + '/less/global/interactive.less') 
     // Convert to CSS 
     .pipe(less()) 

    // Merge dynamic and static styles 
    return merge(streamMain, streamEvents) 
     // Concatenate in a single file 
     .pipe(concat('main.css')) 
     // Remove all comments 
     .pipe(stripCssComments({ 
      all: true 
     })) 
     // Autoprefixer for browser compatibility 
     .pipe(autoprefixer()) 
     // Compression 
     .pipe(minifyCSS()) 
     // Output file 
     .pipe(gulp.dest(dest + '/css')); 
}); 
/* ===== LESS END ===== */ 
+0

ваше предложение работает, если я только создаю файлы JS ... Но если я также создаю код LESS в одной и той же задаче, я получаю несколько проблем. Я просто обновляю свой код. У вас есть идеи, как это решить. Я не понимаю, зачем просто использовать return merge (sbm, scb, scm); не будет работать. –

Смежные вопросы