symplify/vendor-patches

使用单条命令生成包的供应商补丁

11.3.7 2024-01-23 17:12 UTC

This package is auto-updated.

Last update: 2024-08-23 18:21:36 UTC


README

Downloads total

使用单条命令生成包的供应商补丁。

安装

composer require symplify/vendor-patches --dev

# If you are applying patches to production, be sure to also explicitly add cweagans/composer-patches.
composer require cweagans/composer-patches

用法

如何为 /vendor 目录中的文件 创建补丁?

1. 使用 *.old 后缀创建你想要更改的 /vendor 文件的副本

例如,如果你编辑

vendor/nette/di/src/DI/Extensions/InjectExtension.php
# copy of the file
vendor/nette/di/src/DI/Extensions/InjectExtension.php.old

2. 打开原始文件并更改所需的行

 			if (DI\Helpers::parseAnnotation($rp, 'inject') !== null) {
-				if ($type = DI\Helpers::parseAnnotation($rp, 'var')) {
+				if ($type = \App\Reflection\Helper\StaticReflectionHelper::getPropertyType($rp)) {
+				} elseif ($type = DI\Helpers::parseAnnotation($rp, 'var')) {
 					$type = Reflection::expandClassName($type, Reflection::getPropertyDeclaringClass($rp));

只有 *.php 文件被加载,而不是 *.php.old。这样你可以在生成补丁之前确保新的代码是正常工作的。

3. 运行 generate 命令 🥳️

vendor/bin/vendor-patches generate

此工具将在 /patches 目录中生成所有以此方式创建的文件的补丁文件

/patches/nette-di-di-extensions-injectextension.php.patch

补丁路径基于原始文件路径,因此补丁名称总是唯一的。


此外,它还将 cweagans/composer-patches 的配置添加到你的 composer.json

{
    "extra": {
        "patches": {
            "nette/di": [
                "patches/nette_di_di_extensions_injectextension.patch"
            ]
        }
    }
}

就是这样!


现在你所需要做的就是运行 composer

composer install

然后你的补丁就被应用到你的代码上了!


如果不生效,从 composer 获取更多信息以找出原因

composer install --verbose

故障排除

如果你在 macOS 上,并且应用补丁时出现卡住,你可能需要安装 gpatch,你可以使用以下命令安装:

brew install gpatch

报告问题

如果你遇到错误或想请求新功能,请前往 Symplify monorepo 问题跟踪器

贡献

此包的源代码包含在 Symplify monorepo 中。我们欢迎对此包的贡献,请访问 symplify/symplify