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与MySQL开发中页面出现乱码的一种解决方法
Jul 29 PHP
PHP HTML代码串 截取实现代码
Jun 29 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
php实现监控varnish缓存服务器的状态
Dec 30 PHP
jquery+php实现导出datatables插件数据到excel的方法
Jul 06 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
Oct 29 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
PHP的mysqli_select_db()函数讲解
Jan 23 PHP
TP3.2框架分页相关实现方法分析
Jun 03 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中读取和写入WORD文档的代码
2008/04/09 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
2013/06/28 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
php验证码生成代码
2015/11/11 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
python 域名分析工具实现代码
2009/07/15 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
python sqlite的Row对象操作示例
2019/09/11 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
UNIX文件类型
2013/08/29 面试题
房地产出纳岗位职责
2013/12/01 职场文书
医院义诊活动总结
2014/07/04 职场文书
担保贷款承诺书
2015/04/30 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
Python中相见恨晚的技巧
2021/04/13 Python
Golang 字符串的常见操作
2022/04/19 Golang