0

下面是我的 gulpfile 的片段,基本上我遇到的问题是,无论何时从 CLI 执行“gulp”,open 并不总是打开一个新的浏览器窗口。例如,如果我删除生成的“dist”文件夹并执行“gulp”,那么“dist”将使用 .html 文件和资产结构搭建支架,但它无法在我的浏览器窗口中打开该站点...

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

我如何设置 open 以便它每次都执行?我认为它以某种方式与“清洁”任务发生冲突,但我不太确定。

任何帮助,将不胜感激。

清洁任务:

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

4

1 回答 1

2

您有两个相关问题:

  1. 您需要在任务中返回流,否则 gulp 不会知道它们已经完成。如果您不返回流、返回承诺使用回调函数,gulp 假定任务是同步的。

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

    只需将您的任务更改为如下所示:

    gulp.task('clean', function() {
        return gulp.src(['./dist/**/*.*'], { read: true })
            .pipe(clean())
    });
    
  2. gulp 目前无法按指定顺序运行非依赖任务。在您的default任务中,这些依赖项都将同时运行,除非它们相互依赖。

    由于我怀疑您是否希望每次运行其他任务时都强制clean运行该任务,因此另一种解决方案是使用3rd 方库按顺序运行任务。(这是我的库,旨在解决这个确切的问题。)最终,希望他们有办法在本地解决这个问题。

    注意:您仍然需要修复问题 1run-sequence才能工作。

于 2014-02-08T03:27:10.237 回答