信息发布→ 登录 注册 退出

Laravel Vite如何处理静态资源并解决路径问题? (配置manifest.json)

发布时间:2026-01-12

点击量:
Laravel 的 @vite 指令在生产环境默认不读取 manifest.json,需手动启用:配置 vite.config.js 的 build.manifest 为 true、outDir 为 'public/build',并在 @vite() 中指定子目录 'build',确保源路径(如 resources/js/app.js)与 manifest 中 key 严格一致。

为什么 vite build 生成的 manifest.json 在 Laravel 中默认不生效

Laravel 的 @vite 指令默认只处理开发时的 HMR,生产环境不会自动读取 public/build/manifest.json 去重写资源路径。它仍会按原始路径(如 /resources/js/app.js)输出,导致 404 —— 因为实际文件已被哈希重命名(如 /build/assets/app.a1b2c3d4.js)。

如何让 Laravel 正确使用 Vite 的 manifest.json

必须手动启用 manifest 支持,并确保 Vite 构建输出符合 Laravel 期望的结构:

  • vite.config.js 中显式配置 build.manifesttrue,并确认 build.outDir'public/build'
  • config/vite.php(或直接在 Blade 中)调用 @vite(['resources/js/app.js'], 'build'),第二个参数指定子目录,使 Laravel 知道去 public/build/manifest.json 查找映射
  • 确保 APP_URL 设置正确(如 https://yoursite.test),否则 manifest 中的路径可能被错误拼接为绝对 URL
export default defineConfig({
  build: {
    outDir: 'public/build',
    manifest: true,
  },
})

@vite 在生产环境如何解析 manifest.json 中的哈希路径

Laravel 内部通过 ViteManifestEntry 类读取 public/build/manifest.json,将原始路径(如 resources/js/app.js)映射为带 hash 的文件名(如 assets/app.8f2a3b4c.js),再拼上 APP_URLbuild/ 前缀。关键点:

  • manifest 文件必须存在且 JSON 格式合法;缺失或语法错误会导致整个 @vite 指令回退到原始路径
  • manifest 中的 key 是源文件相对路径(resources/js/app.js),不是入口 HTML 路径;若你传入 @vite(['/js/app.js']),Laravel 找不到对应 key
  • CSS 文件也需显式声明(

    @vite(['resources/js/app.js', 'resources/css/app.css'])),否则即使 CSS 被 JS 引入,也不会出现在 manifest 输出中

常见路径错误及修复方式

典型现象:页面加载 JS/CSS 404,Network 面板显示请求了 /build/assets/app.xxxx.js 但返回 404,或仍请求未哈希的原始路径。

  • 检查 public/build/manifest.json 是否生成:运行 vite build 后该文件必须存在,且内容类似 {"resources/js/app.js": {"file": "assets/app.xxxx.js"}}
  • 确认 APP_URL 不以 / 结尾(如 APP_URL=https://test.com ✅,APP_URL=https://test.com/ ❌,后者会导致双斜杠 //build/...
  • 避免在 @vite 中混用绝对路径和相对路径:全部用 resources/xxx 开头,不要写 ./resources/xxx/resources/xxx
  • 如果使用自定义 base(如 base: '/static/'),需同步调整 vite.config.js 和 Laravel 的 @vite(..., 'static') 第二个参数
Vite 的 manifest 路径映射依赖于三者严格对齐:Vite 构建输出路径、Laravel 读取 manifest 的子目录声明、以及 Blade 中传入的源路径写法。任一环节大小写、斜杠、相对位置出错,都会导致映射失败——而错误往往静默发生,只表现为资源 404。
标签:# php  # css  # laravel  # html  # js  # json  # vite  # app  # 为什么  # Static  # public  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!