现在我有两项任务:templates
和js
。 templates
必须先运行才能通过js
获取更改。我想结合这些,消除中间文件,以便任务的工作方式如下:
我该怎么做?
这是我目前的代码:
var gulp = require('gulp');
var handlebars = require('gulp-handlebars');
var concat = require('gulp-concat');
var wrap = require('gulp-wrap');
var declare = require('gulp-declare');
// Compile Handlebars templates into JS
gulp.task('templates', function() {
return gulp.src('./templates/*.hbs')
.pipe(handlebars({
handlebars: require('handlebars')
}))
.pipe(wrap('Handlebars.template(<%= contents %>)'))
.pipe(declare({
namespace: 'templates',
noRedeclare: true,
}))
.pipe(concat('templates.js'))
.pipe(gulp.dest('./js/'));
});
// Concatenate and minify application JS
gulp.task('js', function() {
return gulp.src('./js/*.js')
.pipe(concat('app.js'))
.pipe(gulp.dest('./dist/js'));
答案 0 :(得分:-1)
对我而言,最简单,最清洁的方法是使用
调用另一个任务gulp.task('js', ['templates'], function(){
....
这样,js任务需要执行模板任务
将汇编和最终结论保存在2个单独的任务中对我来说并不坏。
请告诉我这是不是一个可行的解决方案
修改强>
在一个单一任务中,您可以尝试使用merge-stream
并做
var merge = require('merge-stream');
gulp.task('templates', function() {
var jsStream = gulp.src('./js/*.js')
.pipe(concat('all.js'));
var templateStream = gulp.src('./templates/*.hbs')
.pipe(handlebars({
handlebars: require('handlebars')
}))
.pipe(wrap('Handlebars.template(<%= contents %>)'))
.pipe(declare({
namespace: 'templates',
noRedeclare: true,
}))
.pipe(concat('templates.js'));
merge(jsStream, templateStream)
.pipe(concat('app.js'))
.pipe(gulp.dest('./dist/js'));
});
我已经用心做了而没有尝试,所以我没有按预期工作