Skip to content

Better support for monoreposΒ #277

Open
@paeolo

Description

@paeolo

πŸ› 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions