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 验证码制作(网树注释思想)
Jul 20 PHP
php设计模式 State (状态模式)
Jun 26 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
Dec 29 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
Oct 21 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP获取二叉树镜像的方法
Jan 17 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
微信小程序和php的登录实现
Apr 01 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/06/14 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
PHP中常用的转义函数
2014/02/28 PHP
PHP goto语句用法实例
2019/08/06 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python之pymysql的使用小结
2019/07/01 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
python speech模块的使用方法
2020/09/09 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
优秀求职信范文分享
2013/12/19 职场文书
高中军训感言500字
2014/02/24 职场文书
六年级学生评语
2014/04/22 职场文书
个人自我剖析材料
2014/09/30 职场文书
2014年节能降耗工作总结
2014/12/11 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
高中军训感想
2015/08/07 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
教你怎么用Python生成九宫格照片
2021/05/20 Python
python库sklearn常用操作
2021/08/23 Python