[英]Piping concat through gulp.src changes gulp.src glob
我对gulp还是很陌生,所以对我来说这可能是一个误解。
我正在尝试创建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文件。 如果我按照以下方式运行两个独立的管道:
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被添加到文件列表的末尾,正如我期望的那样。
任何建议将不胜感激。
您应该检查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/'));
});
Gulp.src接受一个glob和options,因此它无法处理在第一个示例脚本中传递给它的流。
您可以使用类似于第一个使用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合并流:
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/'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.