2017-02-16 77 views
0

我需要能夠使用browserSync的php支持和一些特定的url重寫。我想到了帶有Gulp-Connect-Php包的browserSync和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,應通過使用大口連接和吞掉連無法啓動。

我安裝NPM sleep包和發射browserSync之前添加下列行:

sleep.sleep(15) 

換句話說,我發射browserSync之前加入15秒的延遲。 它的工作原理,但我敢打賭,有一個更優雅的解決方案。

請指教。

回答

0

gulp-connect內部包裝連接,啓動節點http服務器。

服務器啓動後會發出一個事件,調用listeninghttps://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' 
     }); 
    });