Better support for monorepos
Author: paeoloCreated Nov 17, 2020Updated Sep 14, 2026
bug report
On a lerna-based monorepo, there are some issues with patch-package.
Suppose I have this folder structure...
.
├── ...
├── packages
│ ├── a
│ └── patches
│ └── package.json
├── node_modules
└── package.json... and suppose I put patch-package dependency in the package a together with a postinstall script.
Current Behavior
The package a should work in isolation from the top-level folder and other packages.
- When I do a
npm ion the top-level folder, it will install dependencies and so do a npm i ona(if things are well configured). But probably it willhoistdependencies ofain the top-levelnode_modulesinstead of a local one (ie. instead of anode_modulesinside theafolder). - So
patch-packagewill be executed and tries to patch things ina/node_modulesbut since dependencies are hoisted in the top-level folder, it will fail (if no symlink are present).
Possible Solution
Add a flag to enable patching of the top-level node_modules. ie:
- it's very easy to find the root folder, just do a
find-upfor apackage.jsonthat contains aworkspacesfield and/or alerna.jsonfile. - From there, if you can't patch the local
node_modulesfolder (ie. for instance it doesn't exist) tries to patch the rootnode_modules(when flag is enabled)
Context
- I have a monorepo and I really don't want to put the patches in the root folder, but rather in the packages, so patch-package can work for packages individually.
- Also in my setup there are no local
node_modulesie. nonode_modulesinpackages/aand I would like patch-package to work out-of-the-box for this kind of situation (with a flag if it's ok). - I don't want to patch
patch-package
Your Environment
| Software | Version(s) |
|---|---|
| patch-package | 6.2.2 |
Source: ds300/patch-package