Open7
pnpmを使う
-
基本はpnpmのドキュメント通りでOK
https://pnpm.io/installation -
corepack使って、package.jsonのpackageManagerを指定すれば間違ってnpm使われないが、npmにも有効化するにはnpmを一回削除してもう一回入れ直す。最低限のnpm iされないようにするにはpreinstallで予防すればOK https://pnpm.io/only-allow-pnpm
-
github actions上では何も指定しなければpackageManagerのバージョンが使われる https://github.com/pnpm/action-setup?tab=readme-ov-file#version
みんなにやってもらう手順
自分はcorepackで入れてしまったけど、下記の方が無難?
- https://pnpm.io/installation#using-npm でinstall
-
npm remove -g npm
でnpm削除 -
corepack install npm
でnpm再インストール -
corepack use npm
でnpmをpnpm導入するプロジェクトで使えないようにする - 一応git管理されてないファイルの削除(.next、.node_modules)
変更手順
- みんなでやってもらう手順をやる
corepack use pnpm
-
package-lock.json
削除 - (いらなかったかも)
pnpm i
-
pnpm run dev
,pnpm run build && pnpm run start
で動くか確認 - package.jsonに諸々修正
- ciのgithub actionsとかを諸々修正
package.jsonに諸々設定
-
corepack use pnpm
でpackage.json
にpackageManager
フィールドが追加される"packageManager": "pnpm@9.2.0+sha512.98a80fd11c2e7096747762304106432b3ddc67dcf54b5a8c01c93f68a2cd5e05e6821849522a06fb76284d41a2660d5e334f2ee3bbf29183bf2e739b1dafa771"
- corepackの設定できていない人が間違ってnpmコマンド使ってインストールしないようにする
"scripts": {
"preinstall": "npx only-allow pnpm"
},
- ついでにengines指定
"engines": {
"node:": ">=20",
"pnpm": ">=9"
}
ciのgithub actionsとかを諸々修正
参考資料
- https://pnpm.io/continuous-integration#github-actions
- https://github.com/pnpm/action-setup?tab=readme-ov-file#version
-
pnpm/actions-setup
でpnpmいれる- バージョンは何も指定しなければpackage.jsonのpacakgeManagerが使われるので指定しない
- 指定するとハッシュ値まで完全指定しないと不一致のエラーが出る
- npmコマンド使っているところがあればpnpmに変える
-
pnpm i
は全然時間かからないので、actions/cache
は消し、actions/setup-node
でキャッシュ指定する
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4 # Use version of packageManager in package.json
- uses: actions/setup-node@v4
with:
node-version-file: ".node-version"
cache: "pnpm"
ローカル環境ちゃんとしてる人
- npmコマンド実行すると即エラーが出る
-
npm run dev
とかもエラーになる
ローカル環境ちゃんとしてない人
ちゃんとしてなくても大きな問題にはならないはず
- npmコマンド実行しても即エラーは出ない
-
npm i
するとインストールは始まるが、最後にエラーが出る -
npm run dev
とかはエラーにならない
考察
しっかり考えるには下記の内容を理解する
実際のところ
-
npmだと動いてたのにpnpmだと動かない
がおきなければ良さそう。置きても剥がすのそんな大変ではなさそう -
pnpm i
で差分がない場合が早いので、それだけでもローカル、CIでメリットありそう - npmコマンド使い続けちゃう問題はcorepackでしっかり防げるし、ローカルおかしくなっちゃってる人がいても
npm i
は防げるので平気そう
yarnやbunと比較
そんなにやってない
- yarn v3はかつて試したけど、途中でどうしても動かなくなって剥がした経験がある。あと最近あまり聞かない。pnpmで不満なければ試さなくても良いかな・・・v4は最速っぽいけど https://zenn.dev/minedia/articles/2023-08-30-pnpm
- pnpmはわりと使ってる人多い感じだし、悪い噂も目にしない。苦しければ叫びが聞こえるはず
- bunはめっちゃ早くて好きだけど、プロダクションに影響与える部分で使うのは怖い
- testで使うのは粘ってみたい。
toBeInTheDocument
動かない説があったけど、動かせるところまでは試した。手元でも何度も実行するからにはtestの速さは重要。ただそれよりも安定性が重要。
- testで使うのは粘ってみたい。