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读注册表
Oct 09 PHP
PHP编码转换
Nov 05 PHP
使用PHP求两个文件的相对路径
Jun 20 PHP
php图像处理函数大全(推荐收藏)
Jul 11 PHP
php获得url参数中具有&的值的方法
Mar 05 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
Dec 31 PHP
php用户登录之cookie信息安全分析
May 13 PHP
JSON字符串传到后台PHP处理问题的解决方法
Jun 05 PHP
php-app开发接口加密详解
Apr 18 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
PHP加密技术的简单实现
2016/09/04 PHP
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
Web开发之JavaScript
2012/03/29 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
vue组件学习教程
2017/09/09 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
js实现图片实时时钟
2020/01/15 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Python代码实现KNN算法
2017/12/20 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
Django工程的分层结构详解
2019/07/18 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
extern是什么意思
2016/03/10 面试题
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
应急管理培训方案
2014/06/12 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
品质保证书格式
2015/02/28 职场文书
工作会议通知
2015/04/15 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书