2014-02-07 47 views
0

下面是我的gulp文件中的代码片段,基本上我遇到的问题是,只要从CLI执行'gulp',open并不总是打开新的浏览器窗口。例如,如果我删除生成的'dist'文件夹并执行'gulp',那么'dist'将支持.html文件和资产结构,但它将无法在我的浏览器窗口中打开该网站...Gulp'Open'任务无法正确执行

如果我然后取消当前正在运行的gulp任务,并再次从CLI执行它(使用'dist'文件夹),那么gulp会将该站点加载到新的浏览器窗口中,因为它应该如此。

我该如何设置打开方式,以便每次都执行?我认为它以某种方式与'干净'任务发生冲突,但我不太确定。

任何帮助,将不胜感激。

清洁任务:

gulp.task('clean', function() { 
    gulp.src(['./dist/**/*.*'], { read: true }) 
     .pipe(clean()) 
}); 

打开任务:

gulp.task('open', function() { 
    gulp.src(config.startpage) 
     .pipe(open(config.startpage, { url: 'http://localhost:'+config.http_port })); 
}); 

默认任务:

gulp.task('default', ['html', 'scripts', 'styles', 'images', 'open', 'clean'], function() { 
    server.listen(config.livereload_port); 
    http.createServer(ecstatic({ root: 'dist/' })).listen(config.http_port); 
     // gutil.log(gutil.colors.yellow('HTTP Server running on port:'), gutil.colors.red(config.http_port)); 
    gulp.watch(config.src_sass, ['styles'])._watcher.on('all', livereload); 
    gulp.watch(config.src_js, ['scripts'])._watcher.on('all', livereload); 
    gulp.watch(config.src_html, ['html'])._watcher.on('all', livereload); 
}); 

* Config.start_page婆整型到dist/index.html的

回答

2

你有两个相关的问题:

  1. 您需要在任务内返回流,或者将咽不知道,他们已经完成了。如果你不是return a stream, return a promise, or use the callback function,gulp假定任务是同步的。

    这很重要,因为它完全打破了任务依赖关系。 gulp调用任务,看到它是同步的,然后立即开始下一个任务。

    简单地改变你的任务是这样的:

    gulp.task('clean', function() { 
        return gulp.src(['./dist/**/*.*'], { read: true }) 
         .pipe(clean()) 
    }); 
    
  2. 一饮而尽目前还没有办法运行在一个特定的顺序不相关的任务。在您的default任务中,这些依赖关系都将同时运行,除非它们彼此依赖。

    因为我怀疑你要强制clean任务运行其他任务运行每次,其他解决方案是使用一个3rd party library to run tasks in sequence。 (这是我的图书馆,为解决这个问题而编写的确切问题。)最终,希望他们有办法在本地解决此问题。

    注意:您仍然需要修复问题1,以使run-sequence正常工作。

+0

随着你的插件我能我跑顺序更改为:runSequence( '干净',[ '脚本', '风格', '图像', 'HTML'], '开放',回调) ; - 谢谢,它的效果非常好! – leaksterrr