Laravel 10 中 CSS 版本控制依赖 Vite 哈希机制,需用 @vite 指令自动注入哈希路径;Laravel 11 强制使用 Vite,仅支持 @vite/@dynamicVite 解析资源,移除 Mix 支持,升级时须删除 mix-manifest.json 并重建 build 目录。

Laravel 10 中 CSS 资源版本控制的实现方式
在 Laravel 10 中,CSS 资源(如通过 Vite 构建的 assets/css/app.css)的版本控制依赖于 Vite 的内置哈希机制,但框架层不主动介入文件名重写——你必须手动在 Blade 模板中调用 @vite 指令才能触发自动哈希注入。
第一步:确保 vite.config.js 中启用了 build.rollupOptions.output.entryFileNames 和 assetFileNames 配置(默认已启用),Vite 会在构建后生成带哈希的 CSS 文件,例如 assets/app.a1b2c3d4.css;
第二步:在 Blade 模板中使用 @vite('resources/css/app.css'),该指令会读取 manifest.json 并自动替换为带哈希的路径;若直接写 <link rel="stylesheet" href="/css/app.css">,则完全绕过版本控制,浏览器将长期缓存旧文件。
注意:Laravel 10 不提供 mix() 函数的替代品,mix() 已被彻底弃用,强行使用会报 Call to undefined function mix() 错误。
立即学习“前端免费学习笔记(深入)”;
Laravel 11 中 CSS 资源版本控制的关键变化
Laravel 11 彻底移除了对 Mix 的任何残留支持,并将 Vite 绑定为唯一前端构建工具,同时强化了资源引用的安全边界——所有静态资源链接必须经由 @vite 或 @dynamicVite 解析,否则在生产环境会被拒绝加载。
方法一:继续使用 @vite 指令(推荐)
直接写 @vite(['resources/css/app.css', 'resources/js/app.js']),Vite 构建时自动生成哈希文件名,且 manifest.json 中的路径与实际输出严格一致;
方法二:启用动态资源解析(仅限高级场景)
在 config/vite.php 中设置 'dynamic' => true,再使用 @dynamicVite('css/app.css'),该指令会在运行时检查文件修改时间并附加时间戳查询参数(如 ?t=1752433383),【此方式不生成哈希文件名,仅用于开发或CDN未配置版本头的边缘部署】;
方法三:禁用缓存(不推荐)
在 app/Providers/AppServiceProvider.php 的 boot() 方法中调用 Vite::useDynamicManifest(),这会让所有 @vite 输出都带时间戳而非哈希——但会破坏 CDN 缓存有效性,且上线前必须关闭。
从 Laravel 10 升级到 Laravel 11 时 CSS 版本控制的必改项
升级后若发现 CSS 未更新或 404,大概率是以下两个问题之一:
① 项目仍残留 webpack.mix.js 或 npm run dev 脚本,Laravel 11 的 npm run build 默认只执行 Vite 构建,Mix 配置被完全忽略,此时 public/mix-manifest.json 成为无效文件;
② APP_ENV=production 下,Vite 的 manifest.json 路径未正确指向 public/build/,需确认 vite.config.js 中 build.outDir: 'public/build' 已设置,且 @vite 指令未被注释或条件包裹;
最关键的一步:删除 public/mix-manifest.json 和整个 public/build 目录 → 运行 npm run build → 清空视图缓存 php artisan view:clear → 重启服务器。


















