2014-02-07 2 views
0

Ниже приведены фрагменты из моего gulpfile, и в основном проблема, с которой я столкнулся, заключается в том, что open не всегда открывает новое окно браузера, когда «gulp» выполняется из CLI. Например, если я удалю сгенерированную папку «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

Смежные вопросы