question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. ItΒ collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Better support for monorepos

See original GitHub issue

πŸ› 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 i on the top-level folder, it will install dependencies and so do a npm i on a (if things are well configured). But probably it will hoist dependencies of a in the top-level node_modules instead of a local one (ie. instead of a node_modules inside the a folder).
  • So patch-package will be executed and tries to patch things in a/node_modules but 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-up for a package.json that contains a workspaces field and/or a lerna.json file.
  • From there, if you can’t patch the local node_modules folder (ie. for instance it doesn’t exist) tries to patch the root node_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_modules ie. no node_modules in packages/a and 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

Issue Analytics

  • State:open
  • Created 3 years ago
  • Reactions:28
  • Comments:9

github_iconTop GitHub Comments

7reactions
jony89commented, Feb 10, 2021

+1

Experiencing the exact same issue. this becomes even more needed since npm 7 workspaces is out

1reaction
KevinGorjancommented, Apr 22, 2021

+1

Read more comments on GitHub >

github_iconTop Results From Across the Web

11 Great Tools for a Monorepo in 2021 | Bits and Pieces
Best tools to build a monorepo. Develop, build, and publish packages, and scale development. Discover Lerna, Nx, Rush, Bit, Yarn Workspaces, and more....
Read more >
What is monorepo? (and should you use it?)
Monorepos can foster rapid development workflows. ... Storage: an open-source extension for Git that adds better support for large files.
Read more >
Benefits and challenges of monorepo development practices
A closer look at the benefits of monorepos β€” and some of the misconceptions β€” may help you decide if a monorepo environment...
Read more >
Better support for monorepos Β· Issue #289
The major issue: We need to run the specific installed linters/formatters inside those projects. For example, we have some flake8 pluginsΒ ...
Read more >
Monorepo Explained
Everything you need to know about monorepos, and the tools to build them. ... Rush supports it, leveraging the system tar command to...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found