結論 (解決方法だけ知りたい方向け)
-
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 - ローカル環境でも同様の設定を行う場合、以下のコマンドで