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