Skip to content

Better support for monoreposΒ #277

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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