Laravel-Vue SPA部署Ubuntu后报The Mix manifest does not exist错误求助
嘿,刚接触Laravel就碰到这个问题很正常,别慌!这个错误本质是Laravel找不到Mix编译前端资源后生成的mix-manifest.json文件——这个文件记录了编译后资源的哈希路径,Laravel靠它来加载正确的前端文件。下面是一步步的解决步骤:
1. 在服务器上安装前端依赖
登录到你的Ubuntu服务器,进入项目根目录/var/www/html/project,先安装所有前端依赖:
npm install
如果是生产环境,推荐用npm ci,它会严格按照package-lock.json安装依赖,更稳定:
npm ci
2. 编译生产环境的前端资源
依赖安装完成后,执行生产环境的编译命令,这会生成压缩后的前端文件和关键的mix-manifest.json:
npm run prod
⚠️ 注意:别用npm run dev,这是开发环境的编译,生成的资源没有优化,而且可能不会生成适合生产环境的manifest路径。
3. 检查public目录的权限
Web服务器需要能读取public目录下的资源,所以给它设置正确的权限:
sudo chown -R www-data:www-data /var/www/html/project/public sudo chmod -R 755 /var/www/html/project/public
这里的www-data是Nginx/Apache默认的运行用户,如果你的服务器用了其他用户,替换成对应的即可。
4. 确认Blade模板里的资源引用方式
打开/var/www/html/project/resources/views/index.blade.php,确保你用了Laravel的mix()函数来加载资源,比如:
<script src="{{ mix('js/app.js') }}"></script> <link href="{{ mix('css/app.css') }}" rel="stylesheet">
绝对不要直接写固定路径(比如<script src="/js/app.js"></script>),因为mix()会自动读取mix-manifest.json里的哈希路径,避免缓存问题,同时也是Laravel推荐的方式。
5. 清理Laravel缓存
有时候旧的缓存会导致路径识别错误,执行下面的命令清理缓存:
php artisan cache:clear php artisan config:clear
6. 检查.env文件的APP_URL设置
打开项目根目录的.env文件,确保APP_URL设置成你服务器的域名或IP,比如:
APP_URL=http://your-server-ip # 或者域名 APP_URL=http://your-domain.com
Mix会根据这个URL生成正确的资源路径,要是这里写错了,也可能导致manifest找不到。
做完这些步骤,再重新访问你的网站,应该就能解决这个问题了!
内容的提问来源于stack exchange,提问作者sankar

