Gulp在保存到不同输出之前运行不同的任务

时间:2016-06-18 12:40:08

标签: javascript gulp

我正在尝试将拼合的JavaScript文件的结果映射到两个不同的位置,但我想先对它们进行一些额外的处理。我遇到的问题是每个额外的位都完全不同。

这是我尝试过的。我希望在将输出保存到app/scripts时包含源地图,但我希望不包含源地图,但在将其保存到dist/scripts时会对其进行uglify。

gulp.task('scripts', () => {
  return gulp.src('app/scripts.babel/**/*.js')
    .pipe($.babel({
      presets: ['es2015']
    }))
    .pipe($.flatten())
    .pipe($.if('*.js', $.sourcemaps.init()))
    .pipe($.if('*.js', $.sourcemaps.write('.')))
    .pipe(gulp.dest('app/scripts'))
    .pipe($.uglify())
    .pipe(gulp.dest('dist/scripts'));
})

这段代码没有按照我的意愿行事,因为创建源地图的结果会传递给流程的其余部分(除此之外,它实际上是崩溃说Unhandled stream error in pipe)。我想只使用相同的任务来做这件事。我该怎么做?

1 个答案:

答案 0 :(得分:1)

您使用gulp-sourcemaps的方式完全错误。应在源地图中记录的转换必须在String cumuloDatos1 = "http://xxxxxxxxxxx:2480/command/mydb/sql/" + "CREATE%20VERTEX%20V%20SET%20name%20%3D%20%27%20datoAletarorio%27" sourcemaps.init()之间进行。此外gulp-flatten执行not support sourcemaps。幸运的是,使用gulp-rename可以达到同样的效果。

您收到该错误的原因是您尝试sourcemaps.write()源地图文件。因为那些显然不包含有效的JS uglify()解析器的人会抛出。

解决所有这些问题的方法是简单地将您的流存储在变量中,然后将uglify存储到两个不同的目的地。但是,由于基础vinyl files在两个结果流之间共享,因此您需要先使用gulp-clone克隆它们。否则,相同的文件将在两个目的地中结束。

最后,您使用merge-stream合并两个结果流,以便您可以从任务中.pipe()

return