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 相关文章推荐
PHP中for循环语句的几种变型
Mar 16 PHP
php连接mysql数据库代码
Mar 10 PHP
彻底杜绝PHP的session cookie错误
Aug 09 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
php简单图像创建入门实例
Jun 10 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
May 26 PHP
Yii框架函数简单用法分析
Sep 09 PHP
php异常处理捕获错误整理
Sep 23 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 PHP
Laravel统一错误处理为JSON的方法介绍
Oct 18 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
PHP音乐采集(部分代码)
2007/02/14 PHP
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python绘制封闭多边形教程
2020/02/18 Python
python 瀑布线指标编写实例
2020/06/03 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
python元组拆包实现方法
2021/02/28 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
2014年社区庆元旦活动方案
2014/03/08 职场文书
个人合作协议书范本
2014/04/18 职场文书
励志演讲稿范文
2014/04/29 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
金秋助学感谢信
2015/01/21 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题