この記事について
yarn v1 を使っていたリポジトリの更新に際して pnpmへ移行した話
(n番煎じですが手順を整理するためアウトプット)
背景
yarn はすでに v4 が出ており、v1 から移行することが推奨されている
試行錯誤
とりあえず、最新の yarn へ移行を試みた
yarn install → Resolution step でしばらく待たされてエラー
どうやら yarn は v1 と v2 以降では大きく仕組みが異なっているらしい
(v2以降、node_modules を使わないPnP方式を採用)
これに対応していないパッケージが使えないなどの制限があり、引っかかった模様
そして pnpm へ
更新されない v1 を使い続けるわけにもいかないので、他の選択肢を検討
使いやすさ、安定性の面から pnpm を選択
以下記事の比較が見やすく分かりやすかったです
早速動かしてみる
# pnpm インストール (今回は mise を利用)
mise use pnpm
# yarn.lock から pnpm-lock.yaml を生成
pnpm import
# 不要になった yarn.lock は削除
rm ./yarn.lock
# node_modulesも一新
rm -rf ./node_modules # install 後 pnpm prune で良かったかも
pnpm install
# 利用パッケージ内の deprecated な依存を教えてくれた
> WARN X deprecated subdependencies found: <package>@<version>
# 古いパッケージを調べてアップデート
pnpm outdated
pnpm add <package>
# 脆弱性チェック
pnpm audit
WARN, auditで見つけた脆弱性等について
package.json で overrides することで対応
package.json
{
"pnpm": {
"overrides": {
"<package>": "^<version>",
}
},
}
pnpm 強制 (npm, yarn を禁止)する設定も入れてみた
package.json
"scripts": {
"preinstall": "npx only-allow pnpm",
・・・
},
結果、特に問題なく動作しました
所感
- yarn v1 から v4 へ移行するより pnpm へ移行するほうが簡単だった
- 既存構成をほぼそのまま使えるのでストレスがない
- (体感)パッケージのダウンロードが早くなって快適