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 Header用于页面跳转要注意的几个问题总结
Oct 03 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 PHP
php结合curl实现多线程抓取
Jul 09 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
PHP中的自动加载操作实现方法详解
Aug 06 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
layui的select联动实现代码
2019/09/28 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
Python入门篇之数字
2014/10/20 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
python logging模块的使用总结
2019/07/09 Python
Django时区详解
2019/07/24 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
python时间日期操作方法实例小结
2020/02/06 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Python如何在bool函数中取值
2020/09/21 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
HQhair美国/加拿大:英国化妆品、美容及美发产品商城
2019/04/15 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
初中毕业生的自我评价
2014/03/03 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
植物园观后感
2015/06/11 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
python 标准库原理与用法详解之os.path篇
2021/10/24 Python