我有一系列的任务要从一个观察者运行,但我可以让他们按顺序激发:
这里是大口的任务和守望者。
gulp.task('app_scss', function(){
return gulp.src(appScssDir + '/main.scss')
.pipe(sass({ style: 'compressed' }).on('error', gutil.log))
.pipe(autoprefix('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest(appBuilderDir));
});
gulp.task('app_vendor_css', function(){
return gulp.src(appProviderCssDir + '/*.css')
.pipe(minifyCSS({ keepSpecialComments: 0 }))
.pipe(concat('app_vendor.css'))
.pipe(gulp.dest(appBuilderDir));
});
gulp.task('app_build_css', function(){
return gulp.src(appBuilderDir + '/*.css')
.pipe(concat('style.css'))
.pipe(gulp.dest(targetCssDir));
});
gulp.task('watch', function () {
gulp.watch(appScssDir + '/**/*.scss', ['app_scss', 'app_build_css']);
});
gulp.task('default', ['app_build_clean', 'app_scss', 'app_vendor_css', 'app_build_css', 'watch']);
所以当我更新一个scss文件时,它应该编译它们,创建一个css文件。然后构建任务将该文件与供应商文件连接起来。但是每次我保存文件时,它总是落后一步。请看视频作为示例:http://screencast.com/t/065gfTrY
我已经重命名了任务,更改了手表回调的顺序等。
我犯了一个明显的错误吗?
4条答案
按热度按时间w8biq8rn1#
对于GULP 3,我使用run-sequence包来帮助按顺序而不是并行运行任务。这是我配置
watch
任务的方式,例如:上面的例子显示了一个典型的
watch
任务,它将gulp.watch
方法与文件挂钩,当文件发生变化时,gulp.watch
方法将被监听,并且当检测到变化时,runSequence
函数将被调用(在某个watch
的回调中),其中包含一系列以同步方式运行的任务,这与默认的并行运行任务的方式不同。w6lpcovy2#
Gulp会在“同一时间”启动所有任务,除非您声明了依赖关系(或者使流通过管道相互连接)。
例如,如果您希望任务
app_build_css
等待任务app_scss
和app_vendor_css
完成,则声明依赖关系,检查Gulp.task()文档
siotufzp3#
gulp v4
现在Gulp v4已经发布了将近一年多(2017年底发布),它提供了一些很好的方法来使用他们的库巴赫排序任务。
https://github.com/gulpjs/bach
注意:我建议迁移到Gulp v4,因为v3有一些安全漏洞[我不确定这些漏洞现在是否已经修补]。
快速示例
Gulp v4引入了
gulp.series
和gulp.parallel
,这允许您创建任务并选择以串行、并行或混合方式运行,如下所示。说明:这将 * 并行 * 运行
scss
和js
任务,一旦这些任务完成,它将运行watch
任务,因为它们是 * 串行 * 的。扩展示例
下面是一个简化的例子,说明我的gulp文件可能是什么样子的。
zpqajqem4#
我发现使用以下语法定义“系列”任务很有用