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 相关文章推荐
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
php 获得汉字拼音首字母的函数
Aug 01 PHP
用php实现让页面只能被百度gogole蜘蛛访问的方法
Dec 29 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
May 24 PHP
php防止SQL注入详解及防范
Nov 12 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
php制作文本式留言板
Mar 18 PHP
php实现xml与json之间的相互转换功能实例
Jul 07 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
May 29 PHP
PHP var关键字相关原理及使用实例解析
Jul 11 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数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
php实现对象克隆的方法
2015/06/20 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
Python排序搜索基本算法之选择排序实例分析
2017/12/09 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
python and or用法详解
2019/06/26 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
计算机专业个人求职自荐信
2013/09/21 职场文书
物业工作计划书
2014/01/10 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
安全伴我行主题班会
2015/08/13 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
Spring中的@Transactional的工作原理
2022/06/05 Java/Android