Laravel 没有代理的 BrowserSync
Laravel BrowserSync without proxy
我正在尝试使用 Elixir BrowserSync,这是 Laravel 的最新功能之一。
我将它添加到 gulp 文件
elixir(function(mix) {
mix.sass('app.scss')
.browserSync();
});
当我 运行 "gulp watch" 它输出这条消息
[20:49:20] Using gulpfile ~/Desktop/laravel/gulpfile.js
[20:49:20] Starting 'watch'...
[20:49:20] Finished 'watch' after 11 ms
[BS] Proxying: http://homestead.app
[BS] Access URLs:
----------------------------------
Local: http://localhost:3000
External: http://10.9.0.48:3000
浏览器自动启动 url http://localhost:3000 但没有加载。
我认为问题与这一行有关:
[BS] 代理:http://homestead.app
您 运行 有多个宅基地吗?如果您不包含代理设置,它看起来默认通过 homestead.app 进行代理。如果您不在 homestead.app 上托管您的本地文件,它将找不到它。
尝试
.browserSync({ 代理: 'domain.app' });
其中 domain.app 是您为网站提供服务的内容。
您问题的直接答案 - 不代理 .browserSync
是不可能的。详细回答 - 您仍然可以在 gulp
中使用 elixir 的 browserSync
实现,但您必须有一个单独的 PHP 服务器来解释文件。
编辑: 我看到了一种通过在页面中手动提供脚本来不代理的方法(通过在 .browserSync()
调用中不提供任何参数,但是不要我不记得在哪里以及如何做。
原因是 browserSync 为您从服务器请求所有数据,注入一点 javascript 侦听器并显示其他所有内容:
<script type='text/javascript' id="__bs_script__">//<![CDATA[document.write("<script async src='/browser-sync/browser-sync-client.2.9.11.js'><\/script>".replace("HOST", location.hostname));//]]></script>
一种方法是php artisan serve --host=0.0.0.0
在一个单独的终端启动服务器然后使用.browserSync({proxy: 'localhost:8000'})
。一切正常 - BrowserSync UI 和所有刷新页面的调用。
注意: 如果没有 --host=0.0.0.0
,我无法连接到 artisan serve
。
对于那些希望通过 gulp
获得全自动化解决方案的人,这里是:
使用 gulp 软件包 gulp-connect-php
和 laravel-elixir-browsersync2
。第一个启动 php artisan serve
,另一个将它连接到 browserSync
。
安装软件包:
npm install laravel-elixir-browsersync2 --save-dev
npm install gulp-connect-php --save-dev
将所需行添加到您的 gulpfile.js
:
代码:
var elixir = require('laravel-elixir'),
gulp = require('gulp');
var connectPHP = require('gulp-connect-php');
var BrowserSync = require('laravel-elixir-browsersync2');
elixir(function(mix) {
mix.sass('app.scss');
});
elixir(function(mix) {
connectPHP.server({
base: './public',
hostname: '0.0.0.0',
port: 8000
});
BrowserSync.init();
mix.BrowserSync(
{
proxy: 'localhost:8000',
logPrefix : "Laravel Eixir BrowserSync",
logConnections : false,
reloadOnRestart : false,
notify : false
});
});
- 然后 - 只需
gulp
.
免责声明:这可能不适用于 gulp watch
,但可能有人对此有答案。
在 [Laravel Eixir BrowserSync] Proxying: http://localhost:8000
之前还有一行 PHP server not started. Retrying...
。尝试检查服务器是否为 运行 时它属于 gulp-connect-php
。
如果你使用 BrowserSyncs 服务器就可以。
mix.browserSync({
proxy: false,
server: {
baseDir: './'
}
});
我在 laracast 上为 Bloomanity 找到了其他解决方案,它非常适合我!
$ php artisan serve --host=0
然后在你的 gulp 添加:
mix.browserSync({proxy: 'localhost:8000'});
我正在尝试使用 Elixir BrowserSync,这是 Laravel 的最新功能之一。
我将它添加到 gulp 文件
elixir(function(mix) {
mix.sass('app.scss')
.browserSync();
});
当我 运行 "gulp watch" 它输出这条消息
[20:49:20] Using gulpfile ~/Desktop/laravel/gulpfile.js
[20:49:20] Starting 'watch'...
[20:49:20] Finished 'watch' after 11 ms
[BS] Proxying: http://homestead.app
[BS] Access URLs:
----------------------------------
Local: http://localhost:3000
External: http://10.9.0.48:3000
浏览器自动启动 url http://localhost:3000 但没有加载。
我认为问题与这一行有关: [BS] 代理:http://homestead.app
您 运行 有多个宅基地吗?如果您不包含代理设置,它看起来默认通过 homestead.app 进行代理。如果您不在 homestead.app 上托管您的本地文件,它将找不到它。
尝试
.browserSync({ 代理: 'domain.app' });
其中 domain.app 是您为网站提供服务的内容。
您问题的直接答案 - 不代理 .browserSync
是不可能的。详细回答 - 您仍然可以在 gulp
中使用 elixir 的 browserSync
实现,但您必须有一个单独的 PHP 服务器来解释文件。
编辑: 我看到了一种通过在页面中手动提供脚本来不代理的方法(通过在 .browserSync()
调用中不提供任何参数,但是不要我不记得在哪里以及如何做。
原因是 browserSync 为您从服务器请求所有数据,注入一点 javascript 侦听器并显示其他所有内容:
<script type='text/javascript' id="__bs_script__">//<![CDATA[document.write("<script async src='/browser-sync/browser-sync-client.2.9.11.js'><\/script>".replace("HOST", location.hostname));//]]></script>
一种方法是php artisan serve --host=0.0.0.0
在一个单独的终端启动服务器然后使用.browserSync({proxy: 'localhost:8000'})
。一切正常 - BrowserSync UI 和所有刷新页面的调用。
注意: 如果没有 --host=0.0.0.0
,我无法连接到 artisan serve
。
对于那些希望通过 gulp
获得全自动化解决方案的人,这里是:
使用 gulp 软件包 gulp-connect-php
和 laravel-elixir-browsersync2
。第一个启动 php artisan serve
,另一个将它连接到 browserSync
。
安装软件包:
npm install laravel-elixir-browsersync2 --save-dev
npm install gulp-connect-php --save-dev
将所需行添加到您的
gulpfile.js
:
代码:
var elixir = require('laravel-elixir'),
gulp = require('gulp');
var connectPHP = require('gulp-connect-php');
var BrowserSync = require('laravel-elixir-browsersync2');
elixir(function(mix) {
mix.sass('app.scss');
});
elixir(function(mix) {
connectPHP.server({
base: './public',
hostname: '0.0.0.0',
port: 8000
});
BrowserSync.init();
mix.BrowserSync(
{
proxy: 'localhost:8000',
logPrefix : "Laravel Eixir BrowserSync",
logConnections : false,
reloadOnRestart : false,
notify : false
});
});
- 然后 - 只需
gulp
.
免责声明:这可能不适用于 gulp watch
,但可能有人对此有答案。
在 [Laravel Eixir BrowserSync] Proxying: http://localhost:8000
之前还有一行 PHP server not started. Retrying...
。尝试检查服务器是否为 运行 时它属于 gulp-connect-php
。
如果你使用 BrowserSyncs 服务器就可以。
mix.browserSync({
proxy: false,
server: {
baseDir: './'
}
});
我在 laracast 上为 Bloomanity 找到了其他解决方案,它非常适合我!
$ php artisan serve --host=0
然后在你的 gulp 添加:
mix.browserSync({proxy: 'localhost:8000'});