ds300 / patch-package

Fix broken node modules instantly 🏃🏽‍♀️💨
MIT License
10.48k stars 295 forks source link

Don't warn about mismatched versions when using multiple patches for the same library #541

Open elliottkember opened 3 weeks ago

elliottkember commented 3 weeks ago

I just found out about https://github.com/ds300/patch-package/issues/43 which will make our patches really easy to work with by separating patches from each other. What a great feature!

Unfortunately we have enabled --error-on-warn to ensure we keep our patches up to date, and so the warnings we get from multi-patch names causes our builds to break.

I've patched patch-package with patch-package locally to skip + version patches, to work around this and avoid the warning. I'm sure there are some gotchas with the .includes('+') syntax I've used here (NPM versions that include the + character?) but I thought I should submit this as an issue to see whether it could be applied.

Here is the diff that solved my problem:

diff --git a/node_modules/patch-package/dist/applyPatches.js b/node_modules/patch-package/dist/applyPatches.js
index c0217cf..90f3eda 100644
--- a/node_modules/patch-package/dist/applyPatches.js
+++ b/node_modules/patch-package/dist/applyPatches.js
@@ -92,13 +92,19 @@ function applyPatchesForApp({ appPath, reverse, patchDir, shouldExitWithError, s
                 // yay patch was applied successfully
                 // print warning if version mismatch
                 if (installedPackageVersion !== version) {
-                    warnings.push(createVersionMismatchWarning({
-                        packageName: name,
-                        actualVersion: installedPackageVersion,
-                        originalVersion: version,
-                        pathSpecifier,
-                        path,
-                    }));
+                    // Ignore multi-patch versions
+                    if (version.includes('+') && version.split('+')[0] === installedPackageVersion) {
+                        console.log("Ignoring multi-patch version mismatch for", pathSpecifier);
+                    } else {
+                        warnings.push(createVersionMismatchWarning({
+                            packageName: name,
+                            actualVersion: installedPackageVersion,
+                            originalVersion: version,
+                            pathSpecifier,
+                            path,
+                        }));
+                        
+                    }
                 }
                 console.log(`${chalk_1.default.bold(pathSpecifier)}@${version} ${chalk_1.default.green("✔")}`);
             }

This issue body was partially generated by patch-package ❤️

elliottkember commented 3 weeks ago

Oops, a side note – turns out the local patch of patch-package doesn't work, because it only applies the patch after installation. This means in CI, when the packages are all checked out fresh, the patch-package patch isn't applied and the warning persists!