重构 Composer 源管理工具 CRM 为 Composer 插件
CRM 是我很久之前为管理 composer 源做的一款命令行工具,旨在通过简单的命令在多个中国镜像切换,从而方便的管理它们;
那个时候我对 composer 插件了解不是特别多,所以做法比较也粗暴,底层通过执行 composer 命令来达到切换源的目的,在linux 上用起来还好几乎没有特别的感知,但 win 上就会有些迟钝了。这也是显而易见的毕竟切换的时候相当于同时执行了多个命令;后来由于工作的机会了解了一下 composer 插件的开发,所以也就萌生了重构的念头;
与 1.x 版本相比,2.x 主要有下面一些改变:
元数据存储位置改变
在 1.x 版本中是在用户的 Home 文件夹下自定义的一个文件,用户所有的操作都最终持久化到这个 json 文件里去;新版则将元数据存储到了 composer 全局路径下的 config.json
里:
{
"config": {
"_alias": {
"val": "validate",
"up": "update",
"req-sf": "require symfony/event-dispatcher symfony/console",
"req": "require",
"i": "install"
},
"_repositories": [{
"name": "composer",
"url": "https://packagist.org",
"homepage": "",
"author": ""
}, {
"name": "phpcomposer",
"url": "https://packagist.phpcomposer.com",
"homepage": "",
"author": ""
}, {
"name": "composer-proxy",
"url": "https://packagist.composer-proxy.org",
"homepage": "",
"author": ""
}, {
"name": "laravel-china",
"url": "https://packagist.laravel-china.org",
"homepage": "",
"author": ""
}]
},
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.laravel-china.org"
}
}
}
这个是 composer 维护的一个文件,我们借用了一下在里面占用了一个字段。这么做也更加符合了 composer 生态
命令的改变
1.x 版本是个独立入口应用,命令都是以crm关键词开始,比如 crm ls
之类的;在新版插件化里 crm变成了一个命令提供者 (command provider) 角色,所以在新版我们使用 composer
入口;
新版用法
列出所有可使用的镜像
$ composer repo:ls
composer https://packagist.org
phpcomposer https://packagist.phpcomposer.com
* composer-proxy https://packagist.composer-proxy.org
laravel-china https://packagist.laravel-china.org
标“*”表示当前正在使用的源;
切换镜像
$ composer repo:use
Please select your favorite registry (defaults to composer)
[0] composer
[1] phpcomposer
[2] composer-proxy
[3] laravel-china
>
你也可以直接追加镜像名称来跳过选择
$ composer repo:use phpcomposer
添加选项 --current/-c
为当前项目切换源,默认是修改全局的源。
所有命令
执行下面命令查看
$ composer repo
/ ___| | _ \ / |/ |
| | | |_| | / /| /| |
| | | _ / / / |__/ | |
| |___ | | \ \ / / | |
\_____| |_| \_\ /_/ |_|
Composer Repository Manager version 2.0.0
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands for the "repo" namespace:
repo:add Creates a repository
repo:ls List all available repositories
repo:remove Remove a repository
repo:use Change current repository
总结
除了用法上的改变,新版最显著的可能是速度上的提升;如有问题欢迎反馈,在帖子下留言或者到 github issues 发帖均可。
希望这个小工具会给大家在工作开发中带来方便。
真好,大小也刚好,萌生了学做个 composer 包的想法。
@庞浩然Paul 大小刚好是啥意思
@Tao Github 上的源代码,我看起来不费劲,太大了我看着吃力,觉得大小刚好,乃至可以抄一遍。
? 1.0 的时候还贡献过代码 :smile:
@lifesign 是的,印象深刻,这个版本有问题的或者需要改善的话 依然欢迎pr
仰慕大神,请问你2.0版本,是用composer插件模式进行开发的吗