JavaScript
Node.js
npm
YARN

「yarn upgrade パッケージ」で引っかかったこと

現代的なプログラミングには欠かせないパッケージマネージャーですが、Bundlerと同じ感覚でyarnを使ったところ、ハマる例が出てしまいました。

失敗談

Bundlerで一気にアップデートしたら、必要ないパッケージまで上がってしまって困った、ということがあったので、yarnでも同様にyarn upgrade some-packageのようにして、1つのパッケージだけバージョンを上げようとしました。

ところが、それを行ったあとにバンドル後のJavaScriptを見れば、一気に容量が膨れ上がっていました。確認してみると、内部で使っているパッケージの違うバージョン2つが取り込まれてしまっていたのでした。

事態の問題点

同じパッケージが複数入ってしまうと、当然容量は増えますし、それ以外にもルーターなど状態を持つパッケージが複数入ってしまうと、「ルーターA」と「ルーターB」で別の状態を持つ、なんてことになってしまって、正常動作しなくなります。

傾向と対策

Bundlerでは「同じパッケージは1つしか入れられない」のですが、Node.js環境ではパッケージをグローバルにさらさず、requireimportでローカルな名前をつける形となるので、同じパッケージを複数インストールすることも可能なのです。これが逆に仇となったわけです。

そして、一部だけupgradeすると、指定したパッケージの依存パッケージまでまとめてupgradeされるので、upgradeしないパッケージとの間でバージョン差が出てしまいます。yarnについては、「基本yarn upgradeで更新して、特定バージョンがまずい場合にはpackage.jsonに明記する」という形にしたほうがいいかも知れません。