できない.dev

Corepack「This project is configured to use」の原因と直し方

This project is configured to use yarn は、package.json の packageManager に書かれたツールで実行すれば直る。
Corepack は指定と違うパッケージマネージャーの実行を止める。
指定を変えるなら corepack use を使う。

公開: 更新:

要約

corepack enable した環境で、Yarn を指定したプロジェクトで pnpm install を実行すると、pnpm が動く前に止まった。
Node.js 22.23.3(Corepack 0.36.0)では次のように出て、終了コードは 1 だった。
Node.js 20.20.2(Corepack 0.34.6)でも同じ文言だった。

$ pnpm install
This project is configured to use yarn because /home/user/app/package.json has a "packageManager" field

This project is configured to use yarn は、package.json の packageManager で指定されたツールと、実行したツールが違うという意味だ。

{
  "name": "app",
  "packageManager": "yarn@4.9.2"
}

Corepack は pnpm や yarn のコマンドを自分で受け取り、プロジェクトの packageManager を見てから本物を起動する。
指定と違うツールが呼ばれると、ここで止める(README(新しいタブで開く))。
同じプロジェクトで yarn --version は 4.9.2 を返し、npm --version は止められずに動いた。

解決策

1. 指定されたツールで実行する

yarn install

プロジェクトがそのツールを前提にしているなら、これが正しい直し方だ。
ロックファイルもそのツールの形式になっている。

2. ツールを切り替えるなら packageManager を書き換える

corepack use pnpm@10.12.1

corepack use は package.json の packageManager を "pnpm@10.12.1+sha512.…" のようにハッシュ付きで書き換え、インストールまで行った。
その後は pnpm --version が 10.12.1 を返した。

3. 一度だけ別のツールで動かす

COREPACK_ENABLE_STRICT=0 corepack pnpm@10.12.1 --version

COREPACK_ENABLE_STRICT=0 を付けると Corepack は止めなくなり、上のコマンドは 10.12.1 を返した。
ただし、版を付けずに COREPACK_ENABLE_STRICT=0 pnpm --version とした場合、そのとき最新だった pnpm 12.14.0 が起動し、pnpm 自身が ERR_PNPM_OTHER_PM_EXPECTED(This project is configured to use yarn)で止めた。
Corepack を外してもツール側が同じ確認をする版があるので、恒久的な回避には使わない。

よくある原因

  1. 指定と違うツールで実行した: yarn@… のプロジェクトで pnpm を、pnpm@… のプロジェクトで yarn を実行している。corepack use pnpm@10.12.1 で書き換えた後は、yarn --version が逆に This project is configured to use pnpm で止まった。
  2. 親の package.json が効いている: サブディレクトリで実行しても、上の階層の package.json の packageManager が使われた。
    エラー文のパスがその package.json を指す。
  3. 切り替えた後に指定が残っている: ロックファイルだけ入れ替えて、packageManager を古いままにしている。

この手順で直った?