Laravel共享主机静态资源同步:npm run watch修改未生效
我之前在共享主机上部署Laravel项目时也碰到过一模一样的问题,折腾了好一会儿才搞定,给你整理几个最可能的解决方向:
解决Laravel Mix静态资源与共享主机同步问题
1. 先确认Mix的编译路径配置
首先检查你的webpack.mix.js,确保编译产物的输出路径和服务器的实际目录匹配。共享主机常把public_html作为网站根目录,如果你本地Laravel的public目录对应服务器的public_html,就得调整Mix的配置:
// webpack.mix.js mix.js('resources/js/app.js', 'public_html/js') .sass('resources/sass/app.scss', 'public_html/css') .setPublicPath('public_html');
编译后先看本地的输出目录(比如public_html/js)里的文件是不是最新的,如果本地没问题,那问题大概率出在上传环节。
2. 别在共享主机上用npm run watch
npm run watch是给本地开发用的,用来实时监听文件变化自动编译,但共享主机基本不支持长时间运行的进程,而且就算能跑,你本地的修改也不会自动同步到服务器。正确的流程应该是:
- 本地开发时用
npm run watch实时编译调试 - 开发完成后,执行
npm run prod(生产环境用这个,会压缩优化资源;测试环境可以用npm run dev)生成最终静态文件 - 把编译后的
js、css文件夹,还有关键的mix-manifest.json文件,完整上传到服务器对应目录
3. 清理缓存是必做步骤
很多时候修改已经同步了,但缓存让你看不到变化:
- 浏览器端:按
Ctrl + Shift + R强制刷新,或者打开开发者工具的Network面板,勾选「Disable cache」再刷新 - Laravel端:登录服务器执行命令清理框架缓存:
php artisan cache:clear php artisan config:clear php artisan view:clear
另外,一定要确保模板里用mix()函数引入资源,它会自动带上哈希值避免缓存:
<script src="{{ mix('/js/app.js') }}"></script> <link href="{{ mix('/css/app.css') }}" rel="stylesheet">
4. 检查服务器文件权限
上传后的静态文件权限不对,也会导致网站无法读取新资源。一般来说,js、css目录权限设为755,文件权限设为644就行,可以用FTP工具或者服务器的文件管理器调整。
5. 确认文件上传完整
有时候FTP上传会因为网络问题漏掉文件,尤其是mix-manifest.json——这个文件是Laravel用来映射哈希文件名的关键。上传后可以对比本地和服务器上的文件大小,或者直接打开服务器上的mix-manifest.json,看看里面的哈希值是不是和本地编译后的一致。
内容的提问来源于stack exchange,提问作者Danial Nazari
相关产品推荐
相关产品推荐

