V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
slince
V2EX  ›  PHP

重构 Composer 源管理工具 CRM 为 composer 插件

  •  
  •   slince · 2018-04-04 18:09:58 +08:00 · 2689 次点击
    这是一个创建于 2454 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    

    总结

    除了用法上的改变,新版最显著的可能是速度上的提升;如有问题欢迎反馈,在帖子下留言或者到 github issues 发帖均可。 希望这个小工具会给大家在工作开发中带来方便。

    附上项目地址: https://github.com/slince/composer-registry-manager

    4 条回复    2018-04-24 17:11:01 +08:00
    873681136
        1
    873681136  
       2018-04-04 19:38:28 +08:00 via iPhone
    npm 有 nrm,现在 composer 也有 crm 了 🎉
    支持一下,我平时还是选择直接挂代理
    slince
        2
    slince  
    OP
       2018-04-04 20:04:26 +08:00
    @873681136 我的代理有时候还是很慢。。还是国内镜像的快点
    gouchaoer
        3
    gouchaoer  
       2018-04-04 20:08:50 +08:00 via Android
    支持
    swat199538
        4
    swat199538  
       2018-04-24 17:11:01 +08:00
    支持。但是我还是用国内镜像
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   845 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:55 · PVG 04:55 · LAX 12:55 · JFK 15:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.