yarnからpnpmに移行してみる
はじめに
Hello Astroで厨二なのでnpmではなくyarnを使うという話をしましたが、 巷でpnpmが話題になってるので、素振りも兼ねてpnpmに移行してみました。
なぜpnpmを使うのか
雰囲気でyarnを使っていたので全く気付いてなかったのですが、yarnはv1, v2, v3がそれぞれ生きている状況らしく、 どうやらv2で独自路線に振りすぎたのをv3で揺り戻した?みたいになっているらしく、 そもそも私も今使っているyarnのバージョンが良く分からない。。 結局使っていたのはv1だったのですが、もうこの時点で面倒くさいことになっている。 詳細は 「yarn v3 の独自機能を避けつつ yarn v1 から v3 へのアップグレードをする - Zenn」などを参考。
pnpmは彗星の如く現れたよさげなパッケージマネージャなのですが、これも詳細は 「pnpm の特徴 - Zenn」などを見てもらうとして、 個人的に気に入ってるのは「厳格なパッケージ管理」のところです。
簡単に言うとAがBに依存してるとき、npmやyarnの場合node_module内でAとBが同じ階層に配置されるので、Bもまたinclude可能になるのですが、 AがBに依存しなくなったとき、Bをincludeしてたら死ぬよねということです。 Bをincludeしたかったらpackage.jsonに依存を書きなさいと。なるほど。良さそうですね。
インストール
pnpmのインストールは悩んだのですが、yayでインストールできたのでこれを使うことにしました。
移行
以下の記事を参考にしつつ移行します。
node_modules削除
とりあえず node_modules
を削除します。
package.json編集
preinstall scriptsを追加します。
pnpm import / install
pnpm import
で yarn.lock
から pnpm-lock.yaml
を生成します。
yarn.lock
を削除します。
pnpm install
で pnpm-lock.yaml
を元に node_modules
にインストールします
ローカルサーバー起動
インストールできたので、 pnpm run dev
でローカルサーバーを起動してみます。
問題なく動きました。
ビルドコマンドの設定
「Add PNPM to Pre-installed Cloudflare Pages tools」
を参考に、ビルドコマンドを npm run build
から npm install -g pnpm && pnpm install && pnpm run build
に変更します。
さらに、デフォルトで npm install
が実行されるので、 NPM_FLAGS
を --version
に設定しておくことで、無害なコマンドが実行されるように変更しておきます。
えいや
えいやでpushします。この記事が公開されてれば成功です。
まとめ
特に躓くこともなく移行できました。 pnpm install
が爆速なのはやっぱり良いですね。
プロダクションで使うにはまだちょっとエッジ感がありますが、今のところは良さそうです。