PHPackages                             migrify/vendor-patches - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. migrify/vendor-patches

Abandoned → [symplify/vendor-patches](/?search=symplify%2Fvendor-patches)Library[Utility &amp; Helpers](/categories/utility)

migrify/vendor-patches
======================

Generate vendor patches for packages with single command

12.0.6(3mo ago)1871.0M↓48.9%23[3 issues](https://github.com/symplify/vendor-patches/issues)[1 PRs](https://github.com/symplify/vendor-patches/pulls)MITPHPPHP &gt;=7.2CI failing

Since Jan 24Pushed 3mo ago4 watchersCompare

[ Source](https://github.com/symplify/vendor-patches)[ Packagist](https://packagist.org/packages/migrify/vendor-patches)[ Fund](https://www.paypal.me/rectorphp)[ GitHub Sponsors](https://github.com/tomasvotruba)[ RSS](/packages/migrify-vendor-patches/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (1)Versions (396)Used By (0)

Vendor Patches
==============

[](#vendor-patches)

[![Downloads total](https://camo.githubusercontent.com/74921311f4834f696b7bea748c4289e04b719ed62fb4d599cdbe35f9c29f8056/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f73796d706c6966792f76656e646f722d706174636865732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/symplify/vendor-patches/stats)

Generate vendor patches for packages with single command.

Install
-------

[](#install)

```
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
```

Usage
-----

[](#usage)

How to create [a patch for a file in `/vendor`](https://tomasvotruba.com/blog/2020/07/02/how-to-patch-package-in-vendor-yet-allow-its-updates/)?

### 1. Create a Copy of `/vendor` file you Want To Change with `*.old` Suffix

[](#1-create-a-copy-of-vendor-file-you-want-to-change-with-old-suffix)

For example, if you edit:

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

### 2. Open the original file and change the lines you need:

[](#2-open-the-original-file-and-change-the-lines-you-need)

```
 			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));
```

Only `*.php` file is loaded, not the `*.php.old` one. This way you can **be sure the new code** is working before you generate patches.

Make sure to back up other modified files in the vendor/ directory as well as some of the commands below may overwrite them.

### 3. Run `generate` command 🥳️

[](#3-run-generate-command-️)

```
vendor/bin/vendor-patches generate
```

This tool will generate **patch files for all files created this** way in `/patches` directory:

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

The patch path is based on original file path, so **the patch name is always unique**.

Also, it will add configuration for `cweagans/composer-patches` to your `composer.json`:

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

#### 3.1 When using cweagans/composer-patches v2

[](#31-when-using-cweaganscomposer-patches-v2)

`cweagans/composer-patches` v2 requires the execution of 2 additional steps after generating the patches:

Updating the `patches.lock.json` file:

```
composer patches-relock
```

Applying the new patches:

```
composer patches-repatch
```

### 4. Final steps

[](#4-final-steps)

Now you need to do run composer to update the lock file as the checksum of `composer.json` has changed:

```
composer update --lock
```

That's it!

Now all you need to do is run composer:

```
composer install
```

And your patches are applied to your code!

If not, get more information from composer to find out why:

```
composer install --verbose
```

### Summary

[](#summary)

To summarize, the generate workflow is:

```
# generate patches
vendor/bin/vendor-patches generate
# (if using cweagans/composer-patches v2)
composer patches-relock
composer patches-repatch
# update the lock file
composer update --lock
# install with patches applied
composer install
```

Patches File and Patches Folder Options
---------------------------------------

[](#patches-file-and-patches-folder-options)

Optionally, if you use a [patches file](https://docs.cweagans.net/composer-patches/usage/defining-patches/#patches-file) you can specify its path using the `--patches-file` option:

```
vendor/bin/vendor-patches generate --patches-file=patches.json
```

You can choose to write the patches to a different folder than the default 'patches' folder by specifying the folder name using the `--patches-folder` option:

```
vendor/bin/vendor-patches generate --patches-folder=patches-composer
```

TroubleShooting
---------------

[](#troubleshooting)

### Upgrading from older versions of cweagans/composer-patches (pre 2.0.0)

[](#upgrading-from-older-versions-of-cweaganscomposer-patches-pre-200)

If you are upgrading `cweagans/composer-patches` to 2.0.0 and newer versions, you may need to adjust your patches to ensure compatibility.

The new version requires that `--- /dev/null` needs to be replaced with `--- ` in your patch files.

For example, if you have an old patch file that starts with:

```
--- /dev/null
+++ ../src/SomeFile.php
@@ -0,0 +1,10 @@
+
