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 相关文章推荐
简单示例AJAX结合PHP代码实现登录效果代码
Jul 25 PHP
将文件夹压缩成zip文件的php代码
Dec 14 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
php魔术方法功能与用法实例分析
Oct 19 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
PHP实现的支付宝支付功能示例
Mar 26 PHP
php中文语义分析实现方法示例
Sep 28 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 随机生成10位字符代码
2009/03/26 PHP
php通过COM类调用组件的实现代码
2012/01/11 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
理解Koa2中的async&await的用法
2018/02/05 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
python中将字典形式的数据循环插入Excel
2018/01/16 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
多媒体专业自我鉴定
2014/02/28 职场文书
高中生操行评语大全
2014/04/25 职场文书
文艺晚会策划方案
2014/06/11 职场文书
校园开放日新闻稿
2015/07/17 职场文书
党员读书活动心得体会
2016/01/14 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python
mysql的单列多值存储实例详解
2022/04/05 MySQL
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers