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也可以?成Shell Script
Oct 09 PHP
Dedecms V3.1 生成HTML速度的优化办法
Mar 18 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
Jun 05 PHP
PHP中$_FILES的使用方法及注意事项说明
Feb 14 PHP
THINKPHP内容分页代码分享
Jan 14 PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
对php 判断http还是https,以及获得当前url的方法详解
Jan 15 PHP
laravel5 Eloquent 实现事务方式
Oct 21 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/04/28 PHP
php仿ZOL分页类代码
2008/10/02 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
为Extjs加加速(javascript加速)
2010/08/19 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
python文件操作之目录遍历实例分析
2015/05/20 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python中的推导式使用详解
2015/06/03 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
详解python读取和输出到txt
2019/03/29 Python
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
波兰补充商店:Muscle Power
2018/10/29 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
歌颂祖国的演讲稿
2014/05/04 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
大明湖导游词
2015/02/03 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
超市主管竞聘书
2015/09/15 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书