react-is
のバージョン管理に失敗して、いろいろなトラブルに巻き込まれてしまいました。
TL; DR
-
react-is
のバージョンは、react
のバージョンと一致させる必要あり - ただし、自動では保証されない
- yarnでバージョンダウンを行うのは、想像以上に面倒
react-is
って?
自分の記事で以前に触れましたが、あるオブジェクトが「Reactのコンポーネントかどうか」、そして「どのような種類のコンポーネントか」を、オブジェクトの内部構造に直接触らずに判定できるツール群です。
トラブルの状況
React 16.9からdeprecatedの警告が強化されて、ライブラリとして入れているコンポーネントまで警告されるようになってしまったので、いったんreact
とraect-dom
を"^16.8.6 <16.9.0"
で止めることにしました。一方で、react-is
は何の条件もかけずに放置していたら、16.12.0
ぐらいまで上がっていました。
その結果、React.memo
したコンポーネントの判定ができない状態に陥ってしまいました。いろいろ調べるうちに、react
とreact-is
のバージョンの違いが問題だと思いあたりました。特にpeerDependency
などもかかっていなかったので、ずれても何も警告されませんでした。
戻すのも一苦労
ということで、package.json
で"react-is": "^16.8.6 <16.9.0"
と条件を明記して再インストールしたのですが、すでに16.12.0
が入っていて、しかもprop-types
などreact-is
に依存したライブラリがほかにもあったために、依存したライブラリには16.12.0
が別途で入ってしまうという、ものすごく面倒な事態に陥ってしまいました。
yarn upgrade
を行っても解決せず、結局「yarn.lock
の直接書き換え」「node_modules
の全消去」など強引な手段をとって、どうにか全部を16.8.6
に統一することに成功しました。