Laravel 解决composer相关操作提示php相关异常的问题


Posted in PHP onOctober 23, 2019

Laravel 的一大特色就是使用 composer 来管理依赖包,这使得整个项目的升级、扩展变得异常容易。一般情况下,只需要我们输入几个命令并按下回车,就能完成插件包的安装、更新以及卸载工作。

但有时候你会碰到一种比较有意思的问题。那就是使用 composer 进行相关安装、更新插件操作的时候,却报 PHP 程序异常。比如,github中一个项目,在你上次更新之后上游代码又加入新功能,使用了一个新的依赖包。这时你使用git pull更新代码后,依赖包并没有安装,那么再用composer update 来更新这个必要的包时,却会因为项目程序中缺少这个包而报错……(说得有点儿绕),如此就陷入了一种想要安装这个包却报异常,而想要解决这异常又正好需要装这个包的死循环里了。

其实造成这种问题的原因就藏在项目根目录下那个 composer.json 文件里,稍微看一下就会发现,其中有一个 scripts 属性(内容见下方代码),其中设置了项目创建后、根包安装后、插件包安装前和安装后要自动完成的操作,它们大多是php artisan命令,而这些命令是由程序中 Console 组件驱动的,当程序发生异常,它们也就无法运行,于是当 composer 操作调起这些命令时就出现异常了。

"scripts": {
  "post-root-package-install": [
   "php -r \"copy('.env.example', '.env');\""
  ],
  "post-create-project-cmd": [
   "php artisan key:generate"
  ],
  "post-install-cmd": [
   "php artisan clear-compiled",
   "php artisan optimize"
  ],
  "pre-update-cmd": [
   "php artisan clear-compiled"
  ],
  "post-update-cmd": [
   "php artisan optimize"
  ]
 },

在了解了原因之后,再来说解决办法就不难理解了,有两种办法:

第一种方法比较笨,就是在其它空项目里安装这个包(或者找到以前装过的现成的),然后把源码复制到vendor目录后,最后使用 composer dump-autoloat --optimize 更新自动加载文件。

第二种则比较容易,因为它是针对造成这个问题的原因来对症下药的。

具体操作就是先删除上面提到的 scripts并保存 composer.json,然后进行需要的 comoser 操作,完成后再将删除的 scripts 部分加回去去。

需要注意的是,因为这次 composer 操作时没有自动运行 scripts 里那些命令,因而需要自己根据情况手动处理一下,比如 clear-compiled,optimize 等,或者在composer.json改回去之后再进行一次同样的composer操作。

在laravel最新的版本中,composer.json中的pre-update-cmd这条已经被删除了,而这条正是引起本文中所述问题的关键原因。各位可根据自己的情况手动删除它。

以上这篇Laravel 解决composer相关操作提示php相关异常的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
Oct 30 PHP
sae使用smarty模板的方法
Dec 17 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
Aug 06 PHP
php浏览历史记录的方法
Mar 10 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
PHP+Apache+Mysql环境搭建教程
Aug 01 PHP
php中引用符号(&)的使用详细介绍
Dec 06 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
php常用的工具开发整理
Sep 26 PHP
详解PHP用mb_string处理windows中文字符
May 26 PHP
基于laravel缓冲cache的用法详解
Oct 23 #PHP
PHP实现简单登录界面
Oct 23 #PHP
laravel框架与其他框架的详细对比
Oct 23 #PHP
laravel清除视图缓存的代码
Oct 23 #PHP
PHP实现简单用户登录界面
Oct 23 #PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 #PHP
laravel 解决crontab不执行的问题
Oct 22 #PHP
You might like
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
详谈PHP编码转换问题
2015/07/28 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
jquery 新浪网易的评论块制作
2010/07/01 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
浅析Python中的序列化存储的方法
2015/04/28 Python
python使用magic模块进行文件类型识别方法
2018/12/08 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
python Kmeans算法原理深入解析
2019/08/23 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
网页布局中CSS样式无效的十个重要原因详解
2017/08/10 HTML / CSS
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
用友笔试题目
2016/10/25 面试题
电信营业员自我评价分享
2014/01/17 职场文书
个人自查自纠材料
2014/10/14 职场文书
爱心捐款活动总结
2015/05/09 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
心理健康教育主题班会
2015/08/13 职场文书
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript