Gulp任务不同步工作
Gulp tasks not working in sync
我正试图在我的项目中使用browserify
和babelify
。除了同步问题外,一切都很好。
// Browserify
//---------------------------------------------------
gulp.task('browserify', function() {
var bundler = browserify('_babel/script.js').transform(babelify);
bundler.bundle()
.pipe(source('_babel/script.js'))
.pipe(gulp.dest('_dev'));
});
// JavaScript moving and merging
//---------------------------------------------------
gulp.task('js-min', ['browserify'], function() {
return gulp.src('_dev/_babel/script.js')
.pipe(concatjs('scripts.js'))
.pipe(gulp.dest('_js'))
.pipe(browserSync.stream());
});
gulp.watch('_babel/**', ['js-min']);
据我所知,browserify
会通知gullow它已经完成了(它完成得很快,大约10毫秒),而不是。然后js-min
移动旧文件。这样的观察似乎是有效的,因为我总是落后一个变化。
我能做什么?
有三种方法可以告诉Gulp任务已经完成。
-
你有所有同步的东西要在任务中执行:
gulp.task('task-a', function(){ // do sync stuff // you may return here // but because everything is sync Gulp assumes that everything has ended });
-
你得到的回调作为输入
// the passed cb is the next task to execute gulp.task('task-b', function(cb){ // do async stuff cb( result ); });
-
返回承诺/流(适合您的情况):
gulp.task('task-c', function(){ // return either a promise or a stream return gulp.src( ... );
});
在两种情况下,2和3 Gulp都将等待执行结束后再调用下一个函数。你基本上是在写一个案例3,但Gulp认为是1。要解决此问题,只需返回bundler
,您就可以了:
// Browserify
//---------------------------------------------------
gulp.task('browserify', function() {
var bundler = browserify('_babel/script.js').transform(babelify);
return bundler.bundle()
.pipe(source('_babel/script.js'))
.pipe(gulp.dest('_dev'));
});
// JavaScript moving and merging
//---------------------------------------------------
gulp.task('js-min', ['browserify'], function() {
return gulp.src('_dev/_babel/script.js')
.pipe(concatjs('scripts.js'))
.pipe(gulp.dest('_js'))
.pipe(browserSync.stream());
});
gulp.watch('_babel/**', ['js-min']);
相关文章:
- $resource 'get' 函数如何在 AngularJS 中同步工作
- Web 工作线程中的同步 XHR 请求是否仍会锁定浏览器
- 使用jQuery同步Ajax请求;我不能在Adobe Air上工作
- 节点 JS 使用异步请求同步工作流
- 服务工作线程是否可以响应同步 XHR 请求
- 如何实现 emit 以同步方式工作
- 如何使与jquery延迟对象一起工作的函数表现得像同步函数
- ajax json同步无法与设置为false的async一起工作
- Gulp任务不同步工作
- 使用jQuery的同步ajax调用在firefox上不工作
- 如何在AngularJS中使用Promises实现同步工作流
- Css更改不能与同步ajax调用一起工作
- 站点在本地工作/不在Openshift上工作(与服务器、全局npm包版本同步本地、全局npm包版本)
- 浏览器同步监视不工作
- 使用grunt-contrib-watch对两个目录进行深度的单向同步.代码可以工作,但是grunt-contrib-w
- Ajax只能同步工作
- 使用$ q.所有这些都是为了让同步HTTP调用无法正常工作
- 使用promise链接同步与异步功能时的工作流
- Angular Service与Controller同步工作
- 发送同步XMLHttpRequest时,jQuery不工作