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-phplaravel-elixir-browsersync2。第一个启动 php artisan serve,另一个将它连接到 browserSync

  1. 安装软件包:

    • npm install laravel-elixir-browsersync2 --save-dev

    • npm install gulp-connect-php --save-dev

  2. 将所需行添加到您的 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
    });
});
  1. 然后 - 只需 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'});