php composer 安装私有库的简便方法

/ 0评

为自己的私有接口封装了一个私有库,想要能够 composer 安装,方便在多个项目使用。

直接发布到 packagist 不合适。一个方案是搭建私有的 packagist,参考 packagist.com。但这样又太大工程了,杀鸡用牛刀。

我在之前就已经用 gitea 搭建了自己的私有 git 仓库,所以我的想法是 composer require/install/update 能够从我的私有仓库拉取最新版本,然后安装。

google 了一下,composer 本身是支持本地安装的,参考:https://getcomposer.org/doc/05-repositories.md#path

配置如下:

...
├── apps
│   └── my-app
│       └── composer.json
├── packages
│   └── my-package
│       └── composer.json
...

{
    "repositories": [
        {
            "type": "path",
            "url": "../../packages/my-package"
        }
    ],
    "require": {
        "my/package": "*"
    }
}

然后容易想到,手动从仓库下载包下来,解压到一个目录,配置一下 composer.json 就好了。但能不能更自动化一点呢?把这个操作自动完成呢?

联想到 composer 有一些 hook ,可以在运行的各个阶段自定义一些命令,哈!于是:

{
    "require":{
        "xxx":"*" // xxx 你自己的包
    }
    "scripts": {
        "pre-install-cmd": [
            "rm -rf ./packages/xxx && git clone --depth=1 ssh://xxx.git ./packages/xxx && rm -rf ./packages/xxx/.git",
            "composer config repositories.xxx path ./packages/xxx"
        ],
        "pre-update-cmd": [
            "rm -rf ./packages/xxx && git clone --depth=1 ssh://xxx.git ./packages/xxx && rm -rf ./packages/xxx/.git",
            "composer config repositories.xxx path ./packages/xxx"
        ],
    }
}

上面配置在 composer.json 的 scripts 里。其作用是:

在安装之前,删除 packages 下对应名称的私有包(否则git报错:目录不为空),git clone 下载包,删掉 .git 去掉版本管理。然后 composer config 仓库使用下载下来的包的路径。

完美!

🐶

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注