当执行多个吞咽流时,如何将吞咽任务标记为已完成
How to mark gulp task as completed when more than one gulp streams are being executed?
我需要我的gump任务是同步的(处理JS和CSS async,但只有在它们完成之后才处理HTML,因为它包含内联JS和CSS(,虽然像gulp-run-sequence
这样的插件非常有用,但我仍然需要以一种可以标记为已完成的方式正确地构建我的任务。
举个例子;
gulp.task('process-css', function() {
return gulp.src(['src/app.scss'])
.pipe(gp.plumber())
.pipe(gp.sass().on('error', gp.sass.logError))
.pipe(gp.autoprefixer())
.pipe(gp.cleanCSS())
.pipe(gp.rename('app.min.scss'))
.pipe(gulp.dest('./app'));
});
因为我正在执行返回执行中的gump流的return gulp.src()...
,所以当任务到达最终的.pipe()
时,gulp-run-sequence
和gump都可以知道我的任务已经完成。。。
但如果我有这样的东西呢:
gulp.task('process-css-debug', function() {
gulp.src('src/**/app.scss')
.pipe(gp.plumber())
.pipe(gp.sass().on('error', gp.sass.logError))
.pipe(gp.autoprefixer())
.pipe(gp.rename('app.min.scss'))
.pipe(gulp.dest('./app'));
return gulp.src('src/**/app.inline.scss')
.pipe(gp.plumber())
.pipe(gp.sass().on('error', gp.sass.logError))
.pipe(gp.autoprefixer())
.pipe(gp.rename('app.inline.min.scss'))
.pipe(gulp.dest('./app'));
});
因为我现在需要同时运行两个吞咽流,所以我不可能对这两个流都进行双重返回,因此任务可以标记为已完成,直到这两个流都完成为止。我现在唯一的解决方案是:
- 将流分成两个单独的吞咽任务
- 在第一个流的最后一个
.pipe()
内的函数内运行第二个流
有更优雅的方法吗?此外,我不能在一个流中处理所有的CSS,因为我需要能够单独重命名每个SASS文件。
您可以使用合并流或事件流包。以下是合并流的示例:
var merge = require('merge-stream');
gulp.task('process-css-debug', function() {
var first = gulp
.src('src/**/app.scss')
.pipe(gp.plumber())
.pipe(gp.sass().on('error', gp.sass.logError))
.pipe(gp.autoprefixer())
.pipe(gp.rename('app.min.scss'))
.pipe(gulp.dest('./app'));
var second = gulp
.src('src/**/app.inline.scss')
.pipe(gp.plumber())
.pipe(gp.sass().on('error', gp.sass.logError))
.pipe(gp.autoprefixer())
.pipe(gp.rename('app.inline.min.scss'))
.pipe(gulp.dest('./app'));
return merge(first, second);
});
相关文章:
- 在动态crm 2011中,右键单击已完成活动的只读文本时,您是否出现错误
- 检查jquery(或ajax)功能是否已完成
- 如何检测我的音频流是:正在播放、暂停还是已完成
- 如何确保 .animate 在再次执行之前已完成
- 回流如何侦听异步操作已完成
- 检查浏览器是否已完成页面加载
- 复选框,将所有已完成的输入字段复制到下面的字段
- 最后一个图像已完成淡入
- Node.JS async.paralle'不要等到所有任务都完成
- 测试规范在$rootScope之前执行$apply()已完成对promise的解析
- 如何检查AJAX请求是否已完成
- 在继续之前,请确保异步GET/POST请求已完成
- angular won't显示范围变量(已完成)
- 如何查找是否所有 ajax 请求都已完成,并且每个请求都使用 Javascript 和/或 JQuery 将数据从服务器
- jQuery:如何检查以确保所有异步操作都已完成
- 检查 URL 是否已完成加载
- 使用 setTimeout 在不阻止输入的情况下运行大型任务,并使用 Promise 找出任务何时完成
- 清除已完成任务按钮待办事项列表
- 检查任务是否已完成
- 当执行多个吞咽流时,如何将吞咽任务标记为已完成