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 相关文章推荐
第三节 定义一个类 [3]
Oct 09 PHP
第二节 对象模型 [2]
Oct 09 PHP
php实现mysql同步的实现方法
Oct 21 PHP
php Smarty date_format [格式化时间日期]
Mar 15 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
Aug 12 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
php实现的漂亮分页方法
Apr 17 PHP
WordPress自定义时间显示格式
Mar 27 PHP
php实现每天自动变换随机问候语的方法
May 12 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
PHP实现搜索相似图片
2015/09/22 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
Prototype 工具函数 学习
2009/07/23 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
王纯业的Python学习笔记 下载
2007/02/10 Python
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
Python语言描述随机梯度下降法
2018/01/04 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
什么时候用assert
2015/05/08 面试题
入党自我鉴定范文
2013/10/04 职场文书
大学本科生的个人自我评价
2013/12/09 职场文书
开办加工厂创业计划书
2014/01/03 职场文书
活动总结模板
2014/05/09 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
安全检查汇报材料
2014/12/26 职场文书
校友会致辞
2015/07/30 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
检举信的写法
2019/04/10 职场文书
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python