执行npm run dev关闭终端提示Vite manifest not found怎么办
报错根因
从Laravel 9.18版本开始,前端构建工具从Laravel Mix默认切换为Vite,二者运行逻辑有区别:
npm run dev启动的是Vite本地开发热更新服务,不会生成编译后的静态资源与manifest清单文件,服务需要常驻运行才能响应前端资源请求,关闭终端相当于停掉了Vite服务,后端找不到资源清单自然抛出Vite manifest not found错误。- 你一个月前安装时关闭终端还能正常访问,是当时版本还未默认切换Vite,Mix的dev模式会生成临时编译文件,不依赖常驻服务。
对应解决方案
根据你的使用场景二选一即可:
- 本地开发需要热更新效率:保持运行
npm run dev的终端窗口不要关闭,Vite开发服务需要后台常驻。如果不想一直占着终端窗口,可以执行nohup npm run dev > /dev/null 2>&1 &把服务挂到系统后台运行,需要停止的时候查对应node进程kill掉即可。 - 不需要热更新,想关终端也能正常访问:直接执行生产构建命令,提前编译好所有前端资源、生成manifest清单:
npm run build
命令执行完成后会在项目public/build目录下生成编译后的js、css文件和manifest.json清单,这时候不管Vite开发服务是否启动,站点都能正常加载资源,登录、注册等需要加载前端资源的功能都能正常使用。
常见问题排查
如果执行完
npm run build还是报manifest找不到,优先检查两个配置:
- 确认项目
public目录有写入权限,构建命令没有因为权限不足生成失败- 检查
config/vite.php中的build_path配置值,默认应为build,对应实际生成的public/build目录,不要随意修改该配置
如果本地开发用XAMPP配置了自定义虚拟域名而不是http://localhost,需要在项目根目录的vite.config.js中补充server配置,避免热更新时资源加载404,参考配置如下:
import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; export default defineConfig({ plugins: [ laravel({ input: [ 'resources/css/app.css', 'resources/js/app.js', ], refresh: true, }), ], server: { host: '你的本地域名', port: 3000 } });
内容的提问来源于stack exchange,提问作者Pinky Yknip
相关产品推荐
相关产品推荐

