我需要一个与php支持和一些特定的网址重写使用browserSync的能力。我想出了用Gulp-Connect-Php包加上Gulp-Connect + modrewrite的browserSync。下面是我的配置:
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之前启动,并使用gulp-connect应该使用的端口8010,但gulp-connect无法启动。
在启动browserSync之前,我安装了npm sleep包,并添加了以下行:
sleep.sleep(15)换句话说,我在启动browserSync之前添加了15秒的延迟。它是有效的,但我打赌还有一个更优雅的解决方案。
请给我建议。
发布于 2017-02-17 09:10:14
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'
});
});https://stackoverflow.com/questions/42281597
复制相似问题