Gulp源于另一项任务

Pet*_*ers 8 gulp

现在我在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'))
});
Run Code Online (Sandbox Code Playgroud)

Ben*_*Ben 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'));
});
Run Code Online (Sandbox Code Playgroud)


Rus*_*oms 11

因此理论上你应该能够使用gulp版本3.8.0或更高版本.以下是包含该功能示例的更改日志.

来自更改日志:

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'))
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,似乎有一些错误,它处理某些globs时遇到问题,请参阅此处此处提到的问题.希望他们能很快得到解决.这阻止我在我的项目中使用它,但在你的项目中你只添加一个文件,所以尝试一下,也许它会起作用.

如果它不工作,尝试使用merge-stream https://github.com/gulpjs/gulp/blob/master/docs/recipes/using-multiple-sources-in-one-task.md

编辑包括Bjorn Tipling提到的gulp.src的passthrough选项