結論 (解決方法だけ知りたい方向け)
-
package.json
にpackageManager
フィールドを追加 - Vercelの環境変数に
ENABLE_EXPERIMENTAL_COREPACK: 1
を設定
はじめに
パッケージマネージャーとして pnpm
を使用している場合、Vercelが内部で使っている pnpm
のバージョンとあなたのプロジェクトが要求するバージョンが一致しないことで、一見不可解なエラーが発生します。
本記事では、実際に遭遇したエラーとその原因を明らかにし、Vercelの環境変数を活用してシンプルに解決する方法を詳しく解説します。
Error: Detected pnpm "9.x" is not compatible with the engines.pnpm "10.6.3" in your package.json.
Either enable corepack with a valid package.json#packageManager value
(https://vercel.com/docs/deployments/configure-a-build#corepack) or remove your package.json#engines.pnpm.
原因
このエラーは、プロジェクトの package.json
内で指定された pnpm
のバージョンと、Vercelが使用している pnpm
のバージョンが一致しない場合に発生します。
Vercel側が デフォルトで pnpm@9.x を使ってビルドしようとするため、要求されているpnpmのバージョンと一致せず処理を中断してしまいます。
このような状況では、corepack を使って指定バージョンの pnpm を自動インストール・管理する方法が有効ですが、
Vercelでは corepack がデフォルトで無効になっているため、環境変数で明示的に有効化してやる必要があります。
解決策
この問題を解決するためには、Vercelの環境変数に ENABLE_EXPERIMENTAL_COREPACK
を設定し、pnpm
のバージョン管理を corepack
に委ねる方法があります。
手順
1. package.json
に packageManager
フィールドを追加する
package.json
に以下のフィールドを追加し、使用したい pnpm
のバージョンを指定します。
{
"packageManager": "pnpm@10.6.3"
}
これにより、corepack
が指定されたバージョンの pnpm
を使用するようになります。
2. Vercelの環境変数を設定する
Vercelのダッシュボードで、対象のプロジェクトの設定に移動し、以下の環境変数を追加します。
Key | Value |
---|---|
ENABLE_EXPERIMENTAL_COREPACK | 1 |
この設定により、Vercelのビルド環境で corepack
が有効になり、package.json
の packageManager
フィールドで指定された pnpm
バージョンが使用されます。
3. 変更をデプロイする
上記の変更をコミットし、Vercelにプッシュすることで、デプロイ時に指定した pnpm
バージョンが使用されるようになります。
注意点
-
engines.pnpm
フィールドの削除-
package.json
内にengines.pnpm
フィールドがある場合、corepack
の動作と競合する可能性があるため、削除することを推奨します。
.
-
-
corepack
の有効化- ローカル環境でも同様の設定を行う場合、以下のコマンドで
corepack
を有効化し、指定したバージョンのpnpm
を準備する必要があります。
corepack enable corepack prepare pnpm@10.6.3 --activate
- ローカル環境でも同様の設定を行う場合、以下のコマンドで