【问题标题】:Gulp: conditional execution based on output of pipeline?Gulp:基于管道输出的条件执行?
【发布时间】:2017-07-03 05:53:54
【问题描述】:

我想构建一个 gulp 任务,它是一个外部构建工具 (mvn)just once 当且仅当 src 目录中的一个或多个文件比target 目录中的任何文件。 (在我的情况下,检查目标目录中一个特定文件的日期就可以了。)

我尝试将 gulp-newergulp-exec 等插件结合起来,这似乎与我想要的很接近,但它运行外部命令的次数太多了(每个源文件一次),当我像这样使用它们时:

var gulp = require('gulp');
var newer = require('gulp-newer');
var exec = require('gulp-exec');

var paths = {
    src: ["pom.xml", "src/**/*", "resources/**/*", "test/**/*"],
    target: "target/antlr4-typescript-4.6-SNAPSHOT-complete.jar"
}

gulp.task('maven', function() {
    return gulp.src( paths.src)
        .pipe(newer( paths.target ))
        .pipe(exec('echo mvn install -Dmaven.test.skip=true'))
        .pipe(exec.reporter())
        ;
})

我明白它为什么会这样工作,但我如何弥合多个源文件之间的差距并只调用一次外部工具?

gulp-exec 上的文档说:

注意:如果你只是想运行一个命令,只运行命令,不要使用这个插件。

...但是如果我的gulp.src | newer 管道生成任何输出,我不知道如何使用 child_process.exec。

【问题讨论】:

    标签: gulp gulp-watch node-streams


    【解决方案1】:

    考虑一下,这似乎需要一个简单的对象流过滤器,我已经编写并命名为gulp-first。这是它的应用程序的样子:

    var gulp = require('gulp');
    var newer = require('gulp-newer');
    var first = require('gulp-first');
    var exec = require('gulp-exec');
    
    var paths = {
        src: ["pom.xml", "src/**/*", "resources/**/*", "test/**/*"],
        target: "target/antlr4-typescript-4.6-SNAPSHOT-complete.jar"
    }
    
    gulp.task('maven', function () {
        return gulp.src(paths.src, { read: false })
            .pipe(newer(paths.target))
            .pipe(first())
            .pipe(exec('mvn install -Dmaven.test.skip=true'))
            .pipe(exec.reporter())
            ;
    })

    如果目标是最新的,gulp-exec 永远不会执行,但如果需要,最多执行一次。

    欢迎对此解决方案提供反馈。

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2015-01-26
      • 2017-03-17
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多