我需要能够使用带有 php 支持和一些特定 url 重写的 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 无法启动。
我安装了 npmsleep
包并在启动 browserSync 之前添加了以下行:
sleep.sleep(15)
换句话说,我在启动 browserSync 之前添加了 15 秒的延迟。它有效,但我敢打赌有一个更优雅的解决方案。
请指教。