首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gulp:基于流水线输出的条件执行?

Gulp:基于流水线输出的条件执行?
EN

Stack Overflow用户
提问于 2017-07-02 18:57:44
回答 1查看 66关注 0票数 0

我想要构建一个gulp任务,它是一个外部构建工具(),当且仅当src目录中的一个或多个文件比目标目录中的任何文件都更新的情况下,仅一次。(在我的例子中,根据目标目录中一个特定文件的日期进行检查就可以了。)

我尝试将类似于gulp-较新的gulp-exec这样的插件组合在一起,但当我这样使用它们时,它运行了太多次外部命令(每个源文件一次):

代码语言:javascript
复制
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上的文档说:

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

...but我不知道如何使用child_process.exec,如果有任何输出是从child_process.exec管道中生成的。

EN

回答 1

Stack Overflow用户

发布于 2017-07-02 21:39:02

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

代码语言:javascript
复制
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从不执行,但在需要时最多执行一次。

欢迎对此解决方案的反馈。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44874202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档