You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Mix生产环境用户需刷新才能加载最新构建的问题排查

问题排查与解决方案

1. 重复调用mix.version()的问题

你的配置在生产环境会两次触发version():一次是在链式调用末尾,另一次是在if (mix.inProduction())代码块中。重复调用可能导致manifest文件生成异常,干扰资源哈希的正常计算。建议只保留一处调用,调整后的配置如下:

mix.js('resources/js/main.js', 'public/js/app.js')
    .webpackConfig(require('./webpack.config'))
    .vue()
    .vuetify('vuetify-loader', 'resources/js/assets/scss/theme.scss')
    .sass('resources/js/assets/scss/theme.scss', 'public/css/app.css')
    .copyDirectory('resources/js/assets/images', 'public/images');

if (mix.inProduction()) {
    mix.version();
}

2. 静态图片资源未做版本处理

copyDirectory复制的图片资源没有被version()纳入哈希处理,浏览器会长期缓存旧图片。即使页面其他资源更新,图片仍会加载缓存版本。可以通过两种方式解决:

  • 手动给更新的图片文件名添加版本标识(如logo-v2.png);
  • 修改Mix配置,让图片资源也生成带哈希的文件名,同时在模板中用mix()助手引用:
    // 替换原copyDirectory,改用copy并链式调用version
    mix.copy('resources/js/assets/images/**/*', 'public/images').version();
    

3. 服务器端HTML缓存配置问题

如果服务器(如Nginx)给HTML文件设置了强缓存规则,用户浏览器会缓存旧的HTML页面,即使资源哈希已更新,HTML里仍会引用旧资源路径。需要调整服务器配置,禁止或限制HTML文件的缓存:
以Nginx为例,在站点配置中添加:

location / {
    try_files $uri $uri/ /index.php?$query_string;
    # 禁止缓存HTML、PHP文件
    if ($request_filename ~* \.(html|htm|php)$) {
        add_header Cache-Control "no-cache, no-store, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";
    }
}

4. Blade模板资源引用方式错误

确保在Blade模板中使用Laravel的mix()助手函数加载CSS和JS资源,而非硬编码路径:

<link rel="stylesheet" href="{{ mix('css/app.css') }}">
<script src="{{ mix('js/app.js') }}"></script>

硬编码路径会让浏览器依据缓存策略加载旧资源,只有清理缓存才能更新;mix()会自动读取manifest文件,输出带哈希的最新资源路径,确保浏览器加载新版本。

内容的提问来源于stack exchange,提问作者Ben Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:43:23