Description
Current behavior
In a monorepo if corepack use
is executed in a project directory, which is a sub-directory of a monorepo root directory containing an existing package.json
, it does not create or update the package.json
in the project directory. Instead it makes changes to the package.json
in the root of the monorepo.
The monorepo is not a workspace. Each project is separate.
Expected behavior
If corepack use
is executed in a monorepo project directory, it should operate on or create a package.json
in that directory not in the root directory of the monorepo.
The corepack README does not discuss how corepack use
is supposed to behave in a hierarchy of directories containing their own package.json
files. It says simply:
When run, this command will retrieve the latest release matching the provided descriptor, assign it to the project's package.json file, and automatically perform an install.
The Node.js documentation for corepack Configuring a package says:
The Corepack proxies will find the closest package.json file in your current directory hierarchy to extract its "packageManager" property.
I would understand this to mean that if there is a package.json
in the current working directory, then corepack use
should act on this package.json
, and not search up the hierarchy to change a higher level package.json
Step to reproduce
Ubuntu 24.04.1
LTS, Node.js 22.13.0
LTS, Corepack 0.30.0
rm -rf ~/.cache/node/corepack
corepack enable yarn
git clone https://github.com/cypress-io/github-action
cd github-action
git clean -xfd # if repeating
cd examples/yarn-classic
corepack use [email protected]
git status
package.json
in the root of the repo has been modified (not examples/yarn-classic/package.json
) with the addition of
"packageManager": "[email protected]+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
yarn install
has been run in examples/yarn-classic
, creating a new examples/yarn-classic/node_modules
directory there.
Logs
The debug logs do not show which directory is being used to write a package.json
file, nor which directory yarn install
is being run in:
$ corepack use [email protected]
Installing [email protected] in the project...
corepack Installing [email protected] from https://registry.yarnpkg.com/yarn/-/yarn-1.22.22.tgz +0ms
corepack Downloading to /home/mike/.cache/node/corepack/v1/corepack-5003-f7268cee.b6ed3 +1ms
corepack LastKnownGood file would be located at /home/mike/.cache/node/corepack/lastKnownGood.json +802ms
corepack No LastKnownGood version found in Corepack home. +0ms
corepack Download and install of [email protected] is finished +0ms
corepack Checking /home/mike/github/cypress-io/github-action/examples/yarn-classic/package.json +1ms
corepack Checking /home/mike/github/cypress-io/github-action/examples/package.json +0ms
corepack Checking /home/mike/github/cypress-io/github-action/package.json +0ms
corepack Checking /home/mike/github/cypress-io/package.json +1ms
corepack Checking /home/mike/github/package.json +0ms
corepack Checking /home/mike/package.json +0ms
corepack Checking /home/package.json +0ms
corepack Checking /package.json +0ms
yarn install v1.22.22
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
Activity