现在我正在Gulp中创建一个预编译模板的临时文件。之后,我将它们uglify并将它们连接成一个javascript文件。但我宁愿没有临时文件。有没有办法让动态的' Gulp的消息来源?我试过组合流,但无济于事。
示例代码:
gulp.task('template', function () {
gulp.src('./src/tpl/*.hbs')
.pipe(ember())
.pipe(concat('tpl.js')) // make sure to only do concat after
.pipe(gulp.dest('tmp'));
});
gulp.task('uglify', ['template'], function() {
gulp.src(['./tmp/tpl.js', './src/js/app.js'])
.pipe(uglify())
.pipe(concat('epg.js'))
.pipe(gulp.dest('dist'))
});
答案 0 :(得分:13)
任务无法直接传输到其他任务,但您可以使用event-stream
合并流:
var es = require('event-stream');
function template() {
return gulp.src('./src/tpl/*.hbs')
.pipe(ember());
}
function appjs() {
return gulp.src(['./src/js/app.js']);
}
gulp.task('uglify', function() {
return es.merge(template(), appjs())
.pipe(uglify())
.pipe(concat('epg.js'))
.pipe(gulp.dest('dist'));
});
答案 1 :(得分:11)
所以理论上你应该能够使用gulp版本3.8.0或更高版本。 Here is the changelog with an example of the feature
来自更改日志:
gulp.src现在是一个可写的passthrough,这意味着你可以使用它 随时将文件添加到管道中
所以你的任务可能是这样的:
gulp.task('template', function () {
return gulp.src('./src/tpl/*.hbs')
.pipe(ember())
.pipe(concat('tpl.js'))
.pipe(gulp.src('./src/js/app.js', { passthrough: true }))
.pipe(uglify())
.pipe(concat('epg.js'))
.pipe(gulp.dest('dist'))
});
<击> 不幸的是,似乎存在某种错误,它在处理某些整数时遇到问题,请参阅here和here提到的问题。希望他们能很快得到解决。这使我无法在我的项目中使用它,但是在你的项目中你只添加一个文件,所以试一试也许它会起作用。
如果不起作用,请尝试使用merge-stream
https://github.com/gulpjs/gulp/blob/master/docs/recipes/using-multiple-sources-in-one-task.md
击>
编辑为包含Bjorn Tipling提到的gulp.src的passthrough选项
答案 2 :(得分:1)
对于仍然遇到此问题的任何人,您可以完全使用gulp.src将其他文件添加到任务中间流中。您只需添加{ passthrough: true }
作为选项。这是一个有效的例子:
gulp.task(tasks.SASS, () => {
return gulp.src(paths.css.src)
.pipe(sass().on('error', sass.logError))
.pipe(gulp.src([ paths.css.vueStyles ], { passthrough: true }))
.pipe(concat('styles.css'))
.pipe(gulp.dest(paths.css.dest))
对这个问题唯一重要的一点是:
.pipe(gulp.src([ paths.css.vueStyles ], { passthrough: true }))
这些细节对于这个问题是不必要的,但是如果有混淆,我将通过SASS构建的CSS文件作为任务的一部分,然后将它们与webpack构建的SASS文件(从vue文件中提取)连接在一起任务。我的tasks
和paths
变量是我没有使用硬编码字符串(大多数情况下)。
注意,我使用了gulp 4.0,但我认为这不重要,passthrough
was added to master in 2015