steady-ua / unicorn
Composer 单仓库插件
Requires
- php: >=8.0
- composer-plugin-api: ^2.0
- ext-json: *
- composer/composer: ^2.3
- symfony/console: ^5.0|^6.0
README
该 composer
插件组织了一个 PHP 包的单仓库。
确保同一包版本的所有依赖的一致性。
添加了用于处理共享依赖的工具。
概念
例如,我们有两个项目
- 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:build的composer install
命令的附加选项。
示例
{ "extra": { "build-install-options": "--no-dev --optimize-autoloader" } }
post-update-scripts
类型:数组
在执行uni:update、uni:version命令期间,将对所有更改的包执行以下脚本的名称。
示例
{ "extra": { "post-update-scripts": ["test", "phpstan"] } }