steady-ua/unicorn

Composer 单仓库插件

安装: 43

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放性问题: 0

类型:composer-plugin

v1.6.0 2023-12-27 13:49 UTC

This package is auto-updated.

Last update: 2024-09-27 15:27:43 UTC


README

composer 插件组织了一个 PHP 包的单仓库。
确保同一包版本的所有依赖的一致性。
添加了用于处理共享依赖的工具。

  1. 概念
  2. 安装
  3. 用法
  4. 命令
  5. unicorn.json 模式

概念

例如,我们有两个项目

  • web 项目处理 http 请求
  • worker 项目用于后台进程

这两个项目都使用位于 packages 目录中的公共包

 web/
    index.php
    composer.json
 worker/
    console.php
    composer.json
 packages/
    foo/
        composer.json
    bar/
        composer.json
 unicorn.json

composer - 通过指定自己的 path 仓库,提供包含本地包的能力。
但存在一些限制,例如

  • 在每一个 composer.json 文件中,你必须描述所有本地仓库。
  • 每个包都有自己的本地文件,可能使用不同版本的包。
  • 难以分析包的使用情况。
  • 难以更新不同包中使用的依赖。

steady-ua/unicorn 插件消除了这些限制,并提供了分析和更新依赖的工具。

在根目录中,你需要放置一个 unicorn.json 文件。它描述了所有公共仓库。

{
    "repositories": [
        {
            "type": "path",
            "url": "./web"
        },
        {
            "type": "path",
            "url": "./worker"
        },
        {
            "type": "path",
            "url": "./packages/*"
        }
    ]
}

可选地,可以指定其他类型的私有仓库。

现在任何本地包都可以包含这些仓库中的包。
不再需要在每个包中描述 path 仓库。

创建一个共享文件夹 uni_vendor,其中安装了所有必需的包。
所有依赖的包都会创建到它们的符号链接。

这是为了确保所有依赖使用相同的版本。
并且可以加快安装速度。

使用的版本固定在 unicorn.lock 文件中,并在安装期间使用。

在部署应用程序时,你可以复制必要的包而不是符号链接。
命令 composer uni:build

安装

兼容 composer 版本 2.3 或更高。
目前不支持 windows 操作系统。
插件必须全局安装。

composer global require steady-ua/unicorn

用法

创建 unicorn.json 文件后,只需像往常一样使用 composer

建议将 unicorn.lock 文件保存在版本控制系统(例如 Git)中。建议将 uni_vendor 目录,如 vendor 目录一样,排除。生成的 composer.lock 文件也应排除。

如果包含依赖包时发生版本冲突,将显示错误。

使用以下命令解决问题。

命令

composer uni:install

composer uni:install [options] [--] [<packages>...]

如果没有参数调用。如果 uni_vendor 目录不存在,则安装所有依赖。否则,它将检查包要求的完整性。

你可以指定一组本地包。在这种情况下,对于每个包,命令将执行 composer install

composer uni:update

compose uni:update <packages>...

更新所有依赖项中的必需包。

使用此命令,您还可以更改约束。例如,foo/bar:^1.0 or foo/bar=^1.0 or "foo/bar ^1.0"。这将编辑 composer.json 文件。

执行期间,将更改 composer.json 文件。
如果发生错误,文件将恢复到原始状态。

此外,您可以指定一个在更改后执行的脚本列表。

composer uni:version

uni:version [ major | minor | patch ]

提升包版本。

升级包并更新所有依赖项。

执行期间,将更改 composer.json 文件。
如果发生错误,文件将恢复到原始状态。

此外,您可以指定一个在更改后执行的脚本列表。

composer uni:run

uni:run [options] [--] [<script>...]

运行在 unicorn.json 中定义的脚本,适用于所有依赖当前包的包。

选项

  • -s, --self 同时运行当前包的脚本。
  • -r, --recursive 递归解析到根的依赖项。
  • -a, --all 对所有本地包运行。
  • -l, --list 列出脚本。

composer uni:why

显示导致给定包安装的包。

composer uni:why-not

显示阻止给定包安装的包。

composer uni:show

显示有关包的信息。

composer uni:namespace

通过命名空间模式建议包。

composer uni:build

composer uni:build <package> <directory>

在指定的目录中构建本地包。所有必需的包将复制而不是符号链接。

可以设置选项以执行命令 composer install

The unicorn.json schema

位于单一代码仓库的根目录。

repositories

要使用的自定义包仓库。

格式与Composer 相同

示例

{
    "repositories": [
        {
            "type": "path",
            "url": "./web-api-project"
        },
        {
            "type": "path",
            "url": "./packages/*"
        }
    ]
}

您可以将包分组到子目录中。
然后URL将类似于这样 "url": "./packages/*/*"

extra

build-install-options

类型:字符串

传递给uni:buildcomposer install命令的附加选项。

示例

{
    "extra": {
        "build-install-options": "--no-dev --optimize-autoloader"
    }
}

post-update-scripts

类型:数组

在执行uni:updateuni:version命令期间,将对所有更改的包执行以下脚本的名称。

示例

{
    "extra": {
        "post-update-scripts": ["test", "phpstan"]
    }
}