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)。
manifest.json
必须手动启用 manifest 支持,并确保 Vite 构建输出符合 Laravel 期望的结构:
vite.config.js 中显式配置 build.manifest 为 true,并确认 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 中的路径可能被错误拼接为绝对 URLexport 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_URL 和 build/ 前缀。关键点:
@vite 指令回退到原始路径resources/js/app.js),不是入口 HTML 路径;若你传入 @vite(['/js/app.js']),Laravel 找不到对应 key
@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') 第二个参数