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 向右侧拉菜单实现代码,测试使用中
Nov 03 PHP
PHP之COOKIE支持详解
Sep 20 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
php的array_multisort()使用方法介绍
May 16 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
May 06 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
PHP SPL标准库之SplFixedArray使用实例
May 12 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
解读PHP的Yii框架中请求与响应的处理流程
Mar 17 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
PHP的反射机制实例详解
Mar 29 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新手上路(十四)
2006/10/09 PHP
PHP实现微信发红包程序
2015/08/24 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
python scatter函数用法实例详解
2020/02/11 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
pandas实现导出数据的四种方式
2020/12/13 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
优秀毕业生推荐信
2013/11/02 职场文书
火车来了教学反思
2014/02/11 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
学校评语大全
2014/05/06 职场文书
社会公德演讲稿
2014/05/20 职场文书
学习十八大的心得体会
2014/09/01 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
学校施工安全责任书
2015/01/29 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android