如何实现浏览器自动刷新?

解决方案尝试

1)laravel-mix 增加设置:

mix.browserSync('hot-test.dev');

然而重新运行 npm run watch-poll 后,并没能生效。

2)配置 homestead.yaml 中的 port,将虚拟机 8080 端口转发到本机,然后项目中运行命令 npm run hot,同样没有生效。


疑问

大概研究了一下热加载的原理,似乎是开启一个监听服务器,然后应用了浏览器的某些特性,当项目代码发生变化时,监听服务器发送请求给浏览器让它进行刷新。
也许用上面的两种解决,虚拟机中如果开启浏览器,那么都能接收到刷新请求。但这个请求如何从虚拟机中传递出去给本机的浏览器呢?
麻烦各位给予指点,谢谢!

ChoChik
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 5

如果有使用 react, angular这样的前端框架你就会明白。原理是使用websocket,加载页面的时候初始化客户端。而编辑器那一头就充当服务端,当发生变化时就通知客户端进行刷新。

6年前 评论
ChoChik

@Bevis 理解你说的意思,问题是在虚拟机里运行的 npm run hot,要如何设置才能使浏览器(客户端)和编辑器(服务端)进行通信呢?

6年前 评论

我也是没有生效有没有路过朋友看一下,监控是在虚拟机上面,浏览器是在本地。

5年前 评论

铛铛铛铛, 答案来了.

//精简版
mix.browserSync({
    proxy: 'example-domain.test',
    open: false,
    watchOptions: {
        usePolling: true,
        interval: 500,
    },
});
// 半完整版
mix.browserSync({
    proxy: 'example-domain.test',
    open: false,
    watchOptions: {
        usePolling: true,
        interval: 500,
        ignored: /node_modules/, // 这里可不用
    },
    files: [ // 整个files数组也可以不写
        'app/**/*.php',
        'resources/views/**/*.php',
        'resources/js/app.js',
        'resources/js/components/*.vue',
        'packages/mixdinternet/frontend/src/**/*.php',
        'public/js/**/*.js',
        'public/css/**/*.css'
    ],
    notify: false, // 关闭右上角的 connected 弹窗提示
});

①, 虚拟机项目目录执行 npm run watch
②, 在本地浏览器打开 192.168.10.10:3000 即可.
如果想直接打开 example-domain.test 需要映射 8000 端口到 3000, 这样反而不好了, 每次都需要 npm run watch才能运行项目.
如果主机 cpu 占用高, 可在 package.json 的 watch-poll 参数里添加 --watch-poll=5000,
如果使用 npm run watch 则在 watch 里添加

3年前 评论

npm run watch 在本机中运行就可以了,npm 只需要安装了 node 环境 不需要特定的 php 版本,mysql 服务器这些东西,不用一定要在 homestead 中运行。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!