2017-02-16 3 views
0

Мне нужна возможность использовать browserSync с поддержкой php и некоторыми специфическими переписываниями URL. Я придумал browserSync с пакетами Gulp-Connect-Php плюс Gulp-Connect + modrewrite. Вот мой конфиг:Ошибка Gulp-Connect-Php + browserSync + Gulp-Connect для использования

var 
browserSync = require('browser-sync'), 
phpconnect = require('gulp-connect-php'), 
connect  = require('gulp-connect'), 
modrewrite = require('connect-modrewrite'), 

phpconnect.server({base:'dist/',port: 8010}, function(){ 
    connect.server({ 
    port: 8001, 
    middleware: function() { 
     return [ 
      modrewrite([ 
       '^/admin/(.*) - [L]', 
       '^([^.]*|.*?\.php)$ http://localhost:8010$1 [P,NC]' 
      ]) 
     ]; 
    } 
}) 

browserSync({ 
    injectChanges: true, 
    proxy: '127.0.0.1:8010' 
}); 

})

Это прекрасно работает и именно так, как мне нужно. Следующая проблема возникает время от времени, когда я запускаю его:

[error] You tried to start Browsersync twice! To create multiple instances, use browserSync.create().init() 
events.js:141 
     throw er; // Unhandled 'error' event 
    ^

Error: listen EADDRINUSE :::8001 

Другими словами, browserSync начинается перед глотком-подключения и использует порт 8010, который должен быть использован глотком-подключения и проглатывать-подключения не запускается.

Я установил НПМ sleep пакет и добавил следующую строку перед запуском browserSync:

sleep.sleep(15) 

другими словами, я добавил задержку в 15 секунд перед запуском browserSync. Это работает, но я уверен, что есть более элегантное решение.

Пожалуйста, советую.

ответ

0

gulp-connect внутренняя упаковка соединяется, которая запускает узел сервера http.

Он выдает событие после запуска сервера с именем listening. https://nodejs.org/api/net.html#net_event_listening

var 
    browserSync = require('browser-sync'), 
    phpconnect = require('gulp-connect-php'), 
    connect  = require('gulp-connect'), 
    modrewrite = require('connect-modrewrite'), 

    phpconnect.server({base:'dist/',port: 8010}, function(){ 
     var app = connect.server({ 
     port: 8001, 
     middleware: function() { 
      return [ 
       modrewrite([ 
        '^/admin/(.*) - [L]', 
        '^([^.]*|.*?\.php)$ http://localhost:8010$1 [P,NC]' 
       ]) 
      ]; 
     } 
    }) 
    app.server.on('listening', function() { 
     browserSync({ 
     injectChanges: true, 
     proxy: '127.0.0.1:8010' 
     }); 
    }); 
Смежные вопросы