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(视频)Http下载
Dec 12 PHP
简单的PHP多图上传小程序代码
Jul 17 PHP
php代码收集表单内容并写入文件的代码
Jan 29 PHP
探讨php中header的用法详解
Jun 07 PHP
php绘图中显示不出图片的原因及解决
Mar 05 PHP
php实例分享之二维数组排序
May 15 PHP
ThinkPHP模板替换与系统常量及应用实例教程
Aug 22 PHP
php实现的一段简单概率相关代码
May 30 PHP
PHP数组操作简单案例分析
Oct 15 PHP
phpmailer绑定邮箱的实现方法
Dec 01 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
PHP微信红包API接口
2015/12/05 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
js实现随机数小游戏
2019/06/28 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
python实现simhash算法实例
2014/04/25 Python
python使用str & repr转换字符串
2016/10/13 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
公司授权委托书范本
2014/04/03 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
北京故宫的导游词
2015/01/31 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android