Gulp'Open'任务无法正确执行

时间:2014-02-07 22:06:34

标签: javascript node.js gulp

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

如果我然后取消当前正在运行的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

1 个答案:

答案 0 :(得分:2)

您有两个相关问题:

  1. 您需要在任务中返回流,否则gulp将无法知道它们已完成。如果你没有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. gulp目前无法按指定的顺序运行非依赖任务。在default任务中,这些依赖项都将同时运行,除非它们相互依赖。

    由于我怀疑你想强制clean任务每次运行 你运行其他任务,另一种解决方案是使用3rd party library to run tasks in sequence。 (这是我的库,用来解决这个完全问题。)最后,希望他们能够有办法解决这个问题。

    注意:您仍然需要解决run-sequence问题1才能正常工作。