gulp顺序执行任务
2015-08-31 10:54
316 查看
gulp顺序执行任务
在gulp中定义多个任务,可能一个任务要依赖其他某个任务完全结束后才能开始进行,比如,我们先定义两个任务,一个coffee任务,一个clean任务,coffee用于编译coffee代码到js代码,clean用于清理已经编译的代码,在编译之前先clean一下:gulp.task('coffee', function() { gulp.src('server/coffee/*.coffee') .pipe(coffee()) .pipe(gulp.dest('server/js')); }); gulp.task('clean', function() { gulp.src(['server/js/*.js']) .pipe(clean()); });
在官方的文档中找到如下方式,在coffee任务中添加一个参数,标记该任务所依赖的其他任务,依赖的任务先于该任务执行:
gulp.task('coffee',['clean'], function() { gulp.src('server/coffee/*.coffee') .pipe(coffee()) .pipe(gulp.dest('server/js')); });
即,在coffee任务中添加一个任务依赖数组,数组里的任务clean要先执行,再执行任务coffee.
但是在实际操作中发现,如果文件特别多,还是会报错:
events.js:85 throw er; // Unhandled 'error' event ^ Error: ENOENT, stat '/home/coolcao/mycode/node/NutWeb/server/dao/blogDao.js' at Error (native)
这令我不解,网上各种搜,都说这样做没问题,但我这里确实不行。
又不停的问了一下谷老师,最终找到问题了:
对’clean’定义的function而言,虽然函数本身已经执行完毕了,但是文件删除操作可能仍在进行 — gulp任务中的操作大多数都是数据流(Stream)的操作,其操作进度与函数执行无关。
如果需要在文件彻底清理后才开始执行’less’任务,则需要在’clean’任务中进行特殊编码:令其返回最终的数据流(Stream)对象:
gulp.task('clean', function() { return gulp.src(['server/js/*.js']) .pipe(clean()); });
对于数据流而言,代码语句的执行结束仅仅意味着数据操作的开始,唯一能确定数据操作结束的是最后一个数据流所触发的end事件;因此,只有想办法监听到这个end事件,才有可能实现真正意义上的任务依赖。而在任务定义的函数中返回最后一个数据流,是一个相对来说使用起来最方便的方案。
相关文章推荐
- bootloader与app区域代码重叠导致进入HardFault_Handler!
- 【C#】关于HttpContext.Current.Request.QueryString 你要知道点
- C++——派生类中的访问——可见性问题
- C++——内存使用
- 搜索框(附带事件函数)
- 处理HP-UNIX面板灯报警及配置MP
- Java数组练习冒泡排序
- terminate_handler unexpectedly threw an exception
- 迷宫问题——回溯法解
- struct字节对齐
- Ubuntu下Thunderbird和exchange配置
- UDP协议
- 多重比较的问题
- C++——内存对象 禁止产生堆对象 禁止产生栈对象
- [Jumpwe]游戏策划(四)界面设计
- 新的起点。新的征程
- Android中获取字符串长度、宽度
- 分享:怎么去测试一个 app 是否存在安全问题?
- UML(二)——面向对象的基本概念
- 在线浏览PDF文件的实用jquery插件推荐