有时候https://packagist.org/上的包并不是最新的,需要自己直接从github安装。或者两个包之间的共同的依赖有冲突,那么可以这样操作。
下面是直接从github安装overtrue/laravel-wechat
的例子
1.在composer.json中配置依赖源。
把需要的安装的包手动配置到repositories下,如下所示:
{
"require": {
"php": "^8.0.2"
},
"repositories": [
{
"type": "package",
"package": {
"name": "overtrue/laravel-wechat",
"version": "6.0.1",
"dist": {
"url": "https://github.com/overtrue/laravel-wechat/archive/refs/heads/6.x.zip",
"type": "zip"
}
}
}
]
}
2.执行安装
composer require overtrue/laravel-wechat
3.解决自动导入
通过上面的方式安装之后,依赖包已经安装到vendor下面了,可是在使用的时候,你会发现报错,提示找不到对应的class,这是因为,这样的方式安装,composer不会自动导入。如果正常通过require安装的包,composer会自动在vendor/composer/autoload_classmap.php中映射对应的类名和路径。解决这个问题的方式是,手动加入映射。需要特别注意,下面的是类路径,而不是类的命名空间,有的包两者不一致。
// composer.json
{
"autoload": {
"classmap": [
"vendor/overtrue/laravel-wechat",
"vendor/jaeger/querylist",
"vendor/jaeger/g-http"
]
}
}
然后执行
composer autoload-dump
4.其他依赖
对于上面的安装方式,这个被手动安装的包所依赖的其他包不会自动安装,因而需要找到这个包的composer.json,查看该包所依赖的其他包,然后逐个安装。比如上面的laravel-wechat,composer.json如下:
{
"require": {
"illuminate/container": "^5.1 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
"overtrue/wechat": "^5.0"
},
"require-dev": {
"laravel/framework": "^8.5",
"friendsofphp/php-cs-fixer": "^3.1"
},
}
overtrue/wechat不会自动安装,因此需要再次执行composer require overtrue/wechat
,illuminate/container已经安装过了,因此就不需要再次安装了。