はじめに

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.jsonyarn.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.jsonyarn.lockを Git に push する
  • node_modulesyarn.lockを削除した状態でのyarn installは、挙動を理解した上で最後の手段とする