yarn upgrade-interactive --latest を実行する前に yarn.lock を削除してはいけない理由
はじめに
yarn を利用した TypeScript プロジェクトにおいて、
既存環境のパッケージ更新で少しハマった点があったため、備忘としてまとめます。
プロジェクト構築者とメンテナンス担当者(後任)が異なるケースで発生しやすい内容です。
※ 本記事は、poetry add @latest で Incompatible constraints エラーが出た原因の yarn 版です。
環境
- WSL 2.6(Ubuntu)
- yarn 1.22
前提
- すでに yarn でプロジェクトが作成されている
- プロジェクトの構築者と、現在のメンテナンス担当者が異なる
目的
- プロジェクトで使用しているすべてのパッケージを最新化すること
- 具体的には、
yarn upgrade-interactive --latestで表示されるパッケージをなくすこと
想定していたパッケージ更新作業
以下のコマンドで、対話形式でパッケージを更新して、
yarn upgrade-interactive --latest
更新されたpackage.json、yarn.lockを Git に push する予定でした
実際に行ったパッケージ更新作業
yarn upgrade-interactiveを実行する前に、
「一度依存関係をきれいにしてから更新したい」と考え、
以下の手順で再インストールを行いました。
rm -rf node_modules
rm yarn.lock
yarn install
その後に、以下のコマンドを実行したところ、
yarn upgrade-interactive --latest
すでに多くのパッケージが最新になっており、更新対象がほとんど表示されないという状態になりました。
原因
原因は、yarn.lockを削除した状態でyarn installを実行したことでした。
yarn.lock が存在しない状態で yarn install を実行すると、
package.json に記載されたバージョン制約を基に依存関係が再解決されます。
その結果、以前の yarn.lock で固定されていたバージョンより
新しいバージョンがインストールされることがあります。
まとめ
yarnを使ったパッケージ更新では、既存のyarn.lockを基準に実行することが重要です。
yarn upgrade-interactive --latestでパッケージ更新し、package.json、yarn.lockを Git に push するnode_modules、yarn.lockを削除した状態でのyarn installは、挙動を理解した上で最後の手段とする