出现问题
这几天在开发一个项目时,需要引用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中

首选需要我们把oss-sdk-php这个包放在vendor/aliyuncs下,然后将composer.json中加入上图所示的autoload
"autoload": {
"psr-4": {
"OSS\\": "vendor/aliyuncs/oss-sdk-php/src/OSS"
}
},其中OSS\\前面的OSS是vendor/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 .等操作了。