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在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
解析在zend Farmework下如何创立一个FORM表单
Jun 28 PHP
php数组去重复数据示例
Feb 25 PHP
php递归删除目录与文件的方法
Jan 30 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
php中array_slice和array_splice函数解析
Oct 18 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
php实现数字补零的方法总结
Sep 12 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
Mar 30 PHP
WordPress伪静态规则设置代码实例
Dec 10 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
PHP邮件专题
2006/10/09 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
firefox下input type="file"的size是多大
2011/10/24 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
js轮播图代码分享
2016/07/14 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
python使用循环实现批量创建文件夹示例
2014/03/25 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
flask中的wtforms使用方法
2018/07/21 Python
详解Django的CSRF认证实现
2018/10/09 Python
Python下简易的单例模式详解
2019/04/08 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
安全检查与奖惩制度
2014/01/23 职场文书
六查六看自查材料
2014/02/17 职场文书
詹天佑教学反思
2014/04/30 职场文书
社区灵活就业证明
2014/11/03 职场文书
雷锋电影观后感
2015/06/10 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
anaconda python3.8安装后降级
2021/06/11 Python
pandas中对文本类型数据的处理小结
2021/11/01 Python