Gulp源于另一项任务

时间:2014-06-30 16:06:12

标签: 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'))
});

3 个答案:

答案 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'))
});

<击> 不幸的是,似乎存在某种错误,它在处理某些整数时遇到问题,请参阅herehere提到的问题。希望他们能很快得到解决。这使我无法在我的项目中使用它,但是在你的项目中你只添加一个文件,所以试一试也许它会起作用。

如果不起作用,请尝试使用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文件中提取)连接在一起任务。我的taskspaths变量是我没有使用硬编码字符串(大多数情况下)。

注意,我使用了gulp 4.0,但我认为这不重要,passthrough was added to master in 2015