Gulp 同步任务问题

Posted

技术标签:

【中文标题】Gulp 同步任务问题【英文标题】:Gulp synchronous task issue 【发布时间】:2015-10-08 09:47:45 【问题描述】:

我正在尝试在 1 中收集调试所需的 3 个任务。当然,由于 gulp 的性质是异步的,我对此有疑问。所以我搜索并找到了使用 run-sequence 模块来解决该问题的解决方案。我尝试了以下代码,但它似乎没有按预期工作。它没有同步。 这是我尝试过的。有什么想法吗?我不想运行所有这三个命令来完成所有任务。我该怎么做?

var gulp = require('gulp'),
    useref = require('gulp-useref'),
    gulpif = require('gulp-if'),
    debug = require('gulp-debug'),
    rename = require("gulp-rename"),    
    replace = require('gulp-replace'),
    runSequence = require('run-sequence'),
    path = '../dotNet/VolleyManagement.UI';  

gulp.task('debug', function () 
    gulp.src('client/*.html')
        .pipe(debug())
        .pipe(gulp.dest(path + '/Areas/WebAPI/Views/Shared'));
);

gulp.task('rename', function ()     
    gulp.src(path + '/Areas/WebAPI/Views/Shared/index.html')
        .pipe(rename('/Areas/WebAPI/Views/Shared/_Layout.cshtml'))
        .pipe(gulp.dest(path));        

    gulp.src(path + '/Areas/WebAPI/Views/Shared/index.html', read: false)
        .pipe(clean(force: true)); 
);

gulp.task('final', function()
    gulp.src([path + '/Areas/WebAPI/Views/Shared/_Layout.cshtml'])
        .pipe(replace('href="', 'href="~/Content'))
        .pipe(replace('src="', 'src="~/Scripts'))
        .pipe(gulp.dest(path + '/Areas/WebAPI/Views/Shared/'));
); 

gulp.task('debugAll', runSequence('debug', 'rename', 'final'));

【问题讨论】:

【参考方案1】:

 在 gulp 中,您实际上可以设置依赖任务。试试这个:

gulp.task('debug', function () 
    //run debug task
);

gulp.task('rename',['debug'], function ()     
    //run rename once debug is done
);

【讨论】:

我试过了,但问题是它也是异步运行的……'rename'后'debug'任务完成【参考方案2】:

我认为您没有正确定义“debugAll”任务。试试这样:

gulp.task('debugAll', function ()  
    runSequence('debug', 'rename', 'final');
);

您还需要为这些任务返回流,只需在 gulp.src 前面为每个任务添加“return”:调试、重命名、最终。以下是“调试”任务的示例:

gulp.task('debug', function () 
    return gulp.src('client/*.html')
        .pipe(debug())
        .pipe(gulp.dest(path + '/Areas/WebAPI/Views/Shared'));
);

文档中提到了这两项:https://www.npmjs.com/package/run-sequence

【讨论】:

是的,我的错。但是我现在尝试了正确的语法,但无论如何它都不起作用...... 一开始没看到,但实际上你需要返回那些任务的流。只需在 gulp.src 前面为您的每个任务添加“return” - 调试、重命名、最终。对于上面的@ramesh 答案,同样的问题 - 你不返回流。文档中也提到了这一点:npmjs.com/package/run-sequence 这正是我错过的!感谢您指出这一点,现在一切正常:)您能否使用上述信息编辑您的答案,以便我将您的答案标记为已接受?

以上是关于Gulp 同步任务问题的主要内容,如果未能解决你的问题,请参考以下文章

gulp同步执行任务

高级前端以同步的方式运行 Gulp 任务和任务中的步骤

Gulp任务 - 按顺序运行,没有依赖关系

gulp实现的多浏览器同步刷新工具

gulp-connect插件浏览器实时同步刷新

前端构建之谈:Gulp3升级到Gulp4?