pnpm を v10 に上げたら VSCode で ESLint の通知が出なくなった
pnpm v9 から v10 に上げたところ、VSCode の画面で ESLint のエラーの通知が表示されなくなってしまいました。CLI 実行では問題なくエラーが検知されます。
pnpm v9 | pnpm v10 |
---|---|
![]() |
![]() |
解決方法
結論から言うと、.npmrc
に public-hoist-pattern[]=*eslint*
を書いた上で pnpm i
を実行するとこれまで通り ESLint の通知が出るようになりました。
public-hoist-pattern[]=*eslint*
原因
pnpm v10 の変更点で public-hoist-pattern
のデフォルト値が変わったため、これまで @eslint
にデフォルトでホイスティングされていた関連パッケージが無くなったことが原因のようです。
以下に public-hoist-pattern
に関する記述がありました。
• public-hoist-pattern: nothing is hoisted by default. Packages >containing eslint or prettier in their name are no longer hoisted to the root of node_modules. > Related Issue: #8378
(翻訳)
public-hoist-pattern: デフォルトでは何もホイストされません。名前に eslint または prettier を含むパッケージは、node_modules のルートにホイストされなくなりました。Related Issue: #8378
以下の イシュー で *eslint*
と *prettier*
が public-hoist-pattern
のデフォルト値から削除されたようです。
同じように VSCode で ESLint が動かないことを質問している人がいました。以下のコメントで .npmrc
に public-hoist-pattern[]=*eslint*
を書くという解決方法が提示されていました。
https://github.com/pnpm/pnpm/issues/8378#issuecomment-2636152421
同様の質問のイシューで作者の回答もありました。
補足
ちなみに .npmrc
に public-hoist-pattern[]=*eslint*
の記述無しで pnpm i
したときの @eslint
内のシンボリックリンクの状態を見比べたところ、以下のようになっていました。
pnpm v9 | pnpm v10 |
---|---|
![]() |
![]() |
@eslint
に含まれているパッケージのシンボリックリンクの内容が違っています。pnpm v10 では eslintrc
のシンボリックリンクしかありません。おそらくこれが原因で VSCode の ESLint の拡張機能が参照しているパッケージが無くなったためエラーの通知が表示されなくなったようです。
.npmrc
に public-hoist-pattern[]=*eslint*
を書いてから pnpm i
を実行すると v9 の時と同様に必要なパッケージがホイスティングされてシンボリックリンクが作成されるようになりました。
Discussion