将两个gulpif合并为一个

3

我有以下 gulp 任务:

gulp.task('app-scripts', function() {
     return getEnvScriptsStream()
        .pipe(gulpif(stgOrProd(), uglify()))
        .pipe(gulpif(stgOrProd(), concat('embed')))
        .pipe(gulp.dest(paths.js))
        .pipe(connect.reload());
});

我该如何将两个gulpif()合并成一个?
2个回答

2
推荐的方法是使用lazypipe,正如gulp-if文档所述

Lazypipe创建一个函数,在使用时初始化管道链。这允许您在gulp-if条件内创建一系列事件。

对于此示例:
gulp.task('app-scripts', function() {
  return getEnvScriptsStream()
    .pipe(gulpif(stgOrProd(), lazypipe().pipe(uglify).pipe(concat, 'embed')()))
    .pipe(gulp.dest(paths.js))
    .pipe(connect.reload());
});

0

我认为 gulp 插件是对象流,因此你也许可以这样做:

gulp.task('app-scripts', function() {
     return getEnvScriptsStream()
        .pipe(gulpif(stgOrProd(), uglify().pipe(concat('embed'))))
        .pipe(gulp.dest(paths.js))
        .pipe(connect.reload());
}); 

我找不到任何关于这个的文档。我测试了一下,似乎可以工作,但并非总是如此。有什么想法吗? - Naor
你说的“有时候”是指什么?有具体的错误吗?如果你想更好地理解Gulp的概念,我建议阅读substack的stream handbook来学习流的相关知识。Gulp插件是对象流,其中对象是称为vinyl对象的东西,主要是文件的抽象。最常见的实例是由vinyl-fs模块实现的。 - spelufo
concat使用了through模块,而uglify则使用了through2模块。这可能会引起一些麻烦。 - spelufo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接