通过gulp.src管道连接更改gulp.src glob

时间:2014-11-18 20:57:59

标签: javascript gulp

我还是比较新的,所以这可能是我的误解。

我有大量的管道我尝试创建这样的事情:

gulp.src('src/**/*.html')
    .pipe(html2js({some:options}))
    .pipe(concat('templates.js'))
    .pipe(gulp.src('src/**/*.js'))
    .pipe(uglify())
    .pipe(gulp.dest('build/'))

然而,当我运行它时,第二个glob不会捕获所有.js文件。如果我运行两个单独的piplines:

gulp.src('src/**/*.html')
    .pipe(html2js({some:options}))
    .pipe(concat('template.js'))
    .pipe(gulp.dest('build/'));

gulp.src(['src/**/*.js', 'build/template.js'])
    .pipe(uglify())
    .pipe(gulp.dest('build/'));

它按预期工作。似乎没有抛出任何错误,在第一种情况下,template.js会像我期望的那样被添加到文件列表的末尾。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:2)

你应该看看gulp-merge。它旨在结合gulp管道:

var gulpMerge = require('gulp-merge');

gulp.task('build', function() {
    return gulpMerge(
        gulp.src('src/**/*.html')
            .pipe(html2js({some:options}))
            .pipe(concat('template.js')),

        gulp.src('src/**/*.js')
    )
    .pipe(uglify())
    .pipe(gulp.dest('build/'));
});

答案 1 :(得分:1)

Gulp.src接受一个glob和选项,因此它无法处理第一个示例脚本中传输到其中的流。

您可以使用类似于第一个的方法gulp-filter

var filter = gulpFilter('**/*.html');
gulp.src(['src/**/*.html', 'src/**/*.js'])
    .pipe(filter)
    .pipe(html2js({some:options}))
    .pipe(concat('templates.js'))
    .pipe(filter.restore())
    .pipe(uglify())
    .pipe(gulp.dest('build/'))

否则,按照第二个样本的行,您可以使用merge-stream在uglifying之前合并流:

var merge = require('merge-stream');

var htmlStream = gulp.src('src/**/*.html')
    .pipe(html2js({some:options}))
    .pipe(concat('template.js'));

return merge(htmlStream, gulp.src('src/**/*.js'))
    .pipe(uglify())
    .pipe(gulp.dest('build/'));