js文件404主因是mix()调用路径、mix-manifest.json映射及web服务器配置未对齐:需确保npm run prod成功生成带哈希的public/js/app.*.js、manifest文件存在且键匹配、laragon documentroot指向public目录,并在blade中用{{ mix('js/app.js') }}调用。

JS 文件 404,基本不是 Laravel 本身的问题,而是 Laravel Mix 编译路径、发布配置或模板调用三者没对齐。Laragon 是本地开发环境(类似 XAMPP),它不参与编译逻辑,但会影响资源能否被 Web 服务器正确响应——关键仍在 mix() 调用、mix-manifest.json 和 Nginx/Apache(或 Laragon 内置 Apache)的静态文件服务规则。
确认 JS 文件是否真被编译出来
先别急着改代码,直接检查磁盘上有没有生成目标文件:
- 运行
npm run dev或npm run prod后,打开public/js/目录,看是否存在app.js(或你配置的输出名),比如public/js/app.js或带哈希的app.abc123.js - 如果目录为空或文件名不符,说明
webpack.mix.js中的mix.js()路径写错了——它必须从项目根目录开始写,不能用./或绝对路径 - 正确示例:
mix.js('resources/js/app.js', 'public/js');错误示例:mix.js('js/app.js', 'js/')(源路径不存在,输出也不在public/下)
检查 mix-manifest.json 是否存在且有效
{{ mix('js/app.js') }} 不是拼字符串,而是查 public/mix-manifest.json 这个映射表。这个文件必须存在,且包含对应键:
- 手动访问
http://your-site.test/mix-manifest.json(Laragon 默认域名通常是.test),看能不能打开、内容是否为合法 JSON,例如:{"js/app.js": "js/app.js?id=xyz"}或{"js/app.js": "js/app.1a2b3c.js"} - 如果打不开、返回 404、内容为空或格式错误,
mix()就会退化成原路径(如/js/app.js),而浏览器请求该地址时,Apache 必须能直接返回文件——否则就是 404 - 常见漏操作:CI/CD 部署时没传
public/mix-manifest.json,或npm run prod执行失败(比如 PostCSS 插件报错)导致 manifest 没生成
验证 Laragon 的 Apache 是否能服务 public 下的 JS 文件
Laragon 默认把项目根目录设为虚拟主机的 DocumentRoot,但需确保它实际指向的是你的 Laravel 项目的 public/ 目录(不是整个项目根):
- 打开 Laragon 主界面 → 点击右上角「+」→「Add Domain」→ 添加域名时,“Document root” 必须选到你的
your-project/public文件夹 - 然后直接在浏览器访问
http://your-site.test/js/app.js—— 如果能下载或显示 JS 内容,说明 Apache 配置正常;如果 404,说明 DocumentRoot 设错了,或者 .htaccess 规则误拦截了静态文件 - Laravel 自带的
.htaccess在public/下,默认允许静态文件直出,只要路径对、文件存在,就不会进 PHP 路由
Blade 中调用必须用 mix() 且路径要匹配 manifest 键
模板里不能手写 src="/js/app.js",也不能写 src="{{ asset('js/app.js') }}"(这绕过版本控制):
- 正确写法:
<script src="%7B%7B%20mix('js/app.js')%20%7D%7D"></script>,注意参数是js/app.js(不加public/,也不加开头斜杠) - 这个字符串必须和
mix-manifest.json里的 key 完全一致(包括大小写和斜杠方向) - 开发时(
npm run dev)默认不生成哈希,但会加?id=xxx查询参数;生产环境(npm run prod)才生成哈希文件名,前提是.version()已启用(Laravel Mix v6+ 默认开启)











