我需要能够使用具有PHP支持和一些特定URL重写的browsersync。我想出了Gulp-Connect-PHP软件包以及Gulp-Connect Modrewrite的浏览器。这是我的配置:
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在Gulp-Connect之前开始并使用端口8010,该端口应由Gulp-Connect和Gulp-Connect使用。
我安装了NPM sleep
软件包,并在启动browsersync之前添加了以下行:
sleep.sleep(15)
换句话说,在启动浏览器同步之前,我添加了15秒的延迟。它有效,但我敢打赌有一个更优雅的解决方案。
请建议。
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'
});
});