firestoreのテストをしようとしていたときに遭遇したエラーの解決方法です。
Cannot find module 'firebase/compat/database' from 'node_modules/@firebase/rules-unit-testing/dist/index.cjs.js'
【解決した方法】
エラーにもある'node_modules/@firebase/rules-unit-testing/dist/index.cjs.js'
内のcompatモジュールを挟み込んでいるrequire
を修正。
// ・・・
// firebaseV9対応問題を後回しにして、testが通るように修正したcode
require('firebase/database');
require('firebase/firestore');
require('firebase/storage');
var fetch = require('node-fetch');
var firebase = require('firebase/app');
// もともとのfirebaseV9に対応させるように互換性をもたせていたcode
// require('firebase/compat/database');
// require('firebase/compat/firestore');
// require('firebase/compat/storage');
// var fetch = require('node-fetch');
// var firebase = require('firebase/compat/app');
//・・・
【予想される原因】
もともとfirebaseはバージョン8で利用していた。
その後firebaseバージョン9がリリースされた。
その後、@firebase/rules-unit-testingのバージョンが2系に上がり、firebaseバージョン9互換のcodeになっていたが、もともとバージョン8を使っていたため互換性を持たせるためのcompatライブラリがinstallされておらず、エラーが出た。
compatライブラリとは?
version9に対応するための互換ライブラリ
Upgrade from version 8 to the modular Web SDK | Firebase Documentation
現在FirebaseWeb SDKバージョン8以前を使用しているアプリは、このガイドの手順を使用してバージョン9への移行を検討する必要があります。
バージョン9への移行を徐々に実施するためのライブラリ。
使い方としては、バージョン8のアプリをcompatライブラリで書き換えていき、バージョン9と共存させる。最終的にmodular
を使うように更新していく。
firebaseのバージョンを9に上げた際にコメントアウトしたところは戻すことになりそうだ。