记录一次手动引入composer包,但还是出现类不存在的解决办法

发布于 2020-08-25 20:25:14 阅读 48

出现问题

这几天在开发一个项目时,需要引用composer包,但是由于项目的历史原因,composer生成的vendor包是放在git版本管理。因为我的需求只是想让composer引入我这个包,不需要让其余的包都更新(当然是防止线上出现bug,需要稳稳的OKR),可是我尝试了直接使用composer命令直接require这个包,还是现在composer.json中的require字符添加上依赖,然后进行composer update都会将其他的包更新成composer.json中配置的最新版本。

我将包从github中下载下来,将包移动到了本次项目的vendor下面。因为好久没有用composer了,所以找问题的时候很费劲,类不存在的问题肯定是自动加载的问题。

找到问题

但是在运行的时候出现类不存在,当然首先肯定想到的是肯定composer没有加载这个包,那么执行一下composer dump-autoload。再试了下,还是不行!

那么我们先去composer的vendor/composer/autoload_static.php文件中搜索我们引入的包在不在,如果不在,那么肯定是composer没有加载你引入的包。那么怎么加载本地引入的包呢?

解决问题

如图所示,本次我要将aliyuncs/oss-sdk-php这个包引入到composer中

Lark20200825204639.png

首选需要我们把oss-sdk-php这个包放在vendor/aliyuncs下,然后将composer.json中加入上图所示的autoload

"autoload": {
        "psr-4": {
            "OSS\\": "vendor/aliyuncs/oss-sdk-php/src/OSS"
        }
},

其中OSS\\前面的OSSvendor/aliyuncs/oss-sdk-php/src/OSS/OssClient.php的namespace命名空间。

此时我们执行再执行composer dump-autoload后,再次查看vendor/composer/autoload_static.php这个文件,本次引入的包就能被搜索到了。

由于本次是通过git clone的方式将aliyuncs/oss-sdk-php文件下载下来的,我们进行git add .的时候,会提示我们引入的包已经存在git,此时我们只要进入这个包。将.git文件删除即可,就可以继续的git add .等操作了。