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

发布时间 - 2020-02-26 00:00:00    点击率:

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 发帖均可。

希望这个小工具会给大家在工作开发中带来方便。

更多编程相关内容,请关注编程入门栏目!


# composer  # php  # json  # github  # linux  # 重构  # 关键词  # 镜像  # 多个  # 数据存储  # 就会  # 是个  # 是在  # 相关内容  # 也就  # 你也 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何使用 jQuery 正确渲染 Instagram 风格的标签列表  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何快速辨别茅台真假?关键步骤解析  大连网站制作公司哪家好一点,大连买房网站哪个好?  Laravel怎么为数据库表字段添加索引以优化查询  Linux系统命令中screen命令详解  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  轻松掌握MySQL函数中的last_insert_id()  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel中的Facade(门面)到底是什么原理  Laravel如何实现一对一模型关联?(Eloquent示例)  JS弹性运动实现方法分析  成都网站制作公司哪家好,四川省职工服务网是做什么用?  Laravel怎么上传文件_Laravel图片上传及存储配置  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  java中使用zxing批量生成二维码立牌  如何挑选最适合建站的高性能VPS主机?  C语言设计一个闪闪的圣诞树  Python文本处理实践_日志清洗解析【指导】  Swift开发中switch语句值绑定模式  JavaScript如何实现音频处理_Web Audio API如何工作?  Python文件流缓冲机制_IO性能解析【教程】  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  如何安全更换建站之星模板并保留数据?  Android自定义listview布局实现上拉加载下拉刷新功能  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  JavaScript常见的五种数组去重的方式  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel如何实现事件和监听器?(Event & Listener实战)  详解jQuery中基本的动画方法  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  网站建设要注意的标准 促进网站用户好感度!  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  音乐网站服务器如何优化API响应速度?  Laravel如何发送系统通知?(Notification渠道示例)  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  教你用AI将一段旋律扩展成一首完整的曲子  如何快速使用云服务器搭建个人网站?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  JS去除重复并统计数量的实现方法  Laravel怎么使用Intervention Image库处理图片上传和缩放  微信小程序 闭包写法详细介绍