2017-07-18 51 views
2

我有兩個吞嚥任務,我需要運行,一個爲js,一個爲css。我需要他們以不同的方式運行build-dev(未縮小)和build-prod(縮小)。返回後繼續管道吞嚥任務

要做到這一點,我去掉了任務的縮小和gulp.dest部分爲jscss和我,而不是返回gulp.src的任務build-prodbuild-dev。這兩個任務build-prodbuild-dev現在負責以不同方式操作jscss任務。

如何將任務'gulp.src返回到build-prodbuild-dev繼續管道?

注意:因爲它是一個流,看來我是最後一個管道完成後返回流爲任務,然後因爲它是異步的,我爲什麼不能鏈條後gulp.src回報管道?

gulp.task('css', function() { 
    return gulp.src('css/**.css') 
     .pipe(autoprefixer('last 10 version')) 
     .pipe(concatCss('main.css')); 
     // .pipe(minifycss()) 
     // .pipe(gulp.dest('build/css')); 
}); 

gulp.task('js', ... 
    return gulp.src(['./js/**/*.js']) 
     .pipe(
      ... // Huge function that I don't want to duplicate 
}); 

gulp.task('build-prod', function() { 
    gulp.run('css') 
     .pipe(minifycss()) 
     .pipe(gulp.dest('build/css')); 

    gulp.run('scripts') 
     .pipe(minifyjs()) 
     .pipe(gulp.dest('build/js')); 
}); 

gulp.task('build-dev', function() { 
    gulp.run('css') 
     .pipe(gulp.dest('build/css')); 

    gulp.run('scripts') 
     .pipe(gulp.dest('build/js')); 
}); 

回答

0

爲什麼不能在多個地方調用函數?

function cssTask() { 
    return gulp.src('css/**.css') 
    .pipe(autoprefixer('last 10 version')) 
    .pipe(concatCss('main.css')); 
} 

gulp.task('css', function() { 
    return cssTask(); 
}); 

gulp.task('build-prod', function() { 
    cssTask() 
    .pipe(minifycss()) 
    .pipe(gulp.dest('build/css')); 
}); 

gulp.task('build-dev', function() { 
    cssTask() 
    .pipe(gulp.dest('build/css')); 
}); 
0

最好的辦法是用一口條件句:.pipe(gulpif(isProduction, minifycss()))

Gulp If是做一個偉大的方式。

let isProduction = false; 
... 
gulp.task('css', function() { 
    return gulp.src('css/**.css') 
     .pipe(autoprefixer('last 10 version')) 
     .pipe(concatCss('main.css')) 
     .pipe(gulpif(isProduction, minifycss())) // conditional 
     .pipe(gulp.dest('build/css')); 
}); 

gulp.task('build-prod', function() { 
    isProduction = true; 
    gulp.run('css'); 
}); 

gulp.task('build-dev', function() { 
    isProduction = false; 
    gulp.run('css'); 
});