Laravel7项目部署后/assets/vendor/目录资源文件缺失如何解决
Laravel 7 项目 public/assets/vendor 静态资源缺失解决方法
问题根因
你执行composer install、npm run dev、php artisan vendor:publish都没生成对应文件是正常的:
php artisan vendor:publish仅用于发布Laravel扩展包主动注册的配置、视图、静态资源,你引用的这类通用前端第三方库不属于扩展包发布范围,不会被这个命令导出- 默认的Laravel Mix配置只会编译
resources/js、resources/css下的入口文件,不会主动把node_modules里的依赖复制到public/assets/vendor路径 - 这类老项目的
public/assets/vendor资源通常是原开发手动维护的,大概率是Git拉取时遗漏了文件,或者没有把资源同步流程写进构建脚本
可行解决方案
按优先级从高到低尝试:
- 核查Git仓库的文件提交情况
直接去项目托管的Git仓库查看public/assets/vendor目录是否存在、是否有对应文件。很多老项目会直接把用到的第三方前端静态资源提交到代码库,原开发可能误将该目录加入.gitignore规则,导致你拉取代码时缺失这部分内容。如果仓库内有对应文件,直接同步到服务器对应目录即可。 - 从已安装的npm依赖中复制对应文件
打开项目根目录的package.json,查看缺失的前端库(比如bootstrap-datepicker)是否在依赖列表中。如果存在,说明npm install已经把包安装到了node_modules目录,只是没有复制到public路径,直接按代码引用的目录结构复制即可,以bootstrap-datepicker为例:
所有缺失的资源都按这个逻辑,匹配代码里写的路径层级复制即可。# 先创建目标目录 mkdir -p public/assets/vendor/bootstrap-datepicker # 把依赖的dist目录整体复制到目标路径 cp -r node_modules/bootstrap-datepicker/dist public/assets/vendor/bootstrap-datepicker/ - 缺失的依赖先安装再复制
如果package.json里没有对应依赖,先安装对应版本的包,再执行上述复制操作。比如安装bootstrap-datepicker:
安装完成后再按目录结构复制到public下的对应路径,确保路径和代码中引用的完全一致,避免出现404。npm install bootstrap-datepicker@版本号 --save-dev - (可选优化)修正不规范的资源引用写法
你当前代码中用url('public/assets/vendor/...')引用静态资源的写法不符合Laravel规范,后续可以批量替换为asset()助手函数写法,避免子目录部署、域名调整时出现路径错误:<script src="{{ asset('assets/vendor/bootstrap-datepicker/dist/js/bootstrap-datepicker.js') }}"></script>
注意:补全文件后记得核对目录权限,确保web服务器用户有public目录下文件的读取权限,避免权限导致的403问题。
内容的提问来源于stack exchange,提问作者Ostet
相关产品推荐
相关产品推荐

