Skip to content
Kezdőlap » idb module error Firebase – React Native – Expo

idb module error Firebase – React Native – Expo

Expo alatt készített React Native alkalmazáshoz telepített Firebase generált egy szép kis hibát: Metro has encountered an error: While trying to resolve module ‘idb’ from file…

idb module error

Mi ez az „idb module error” hiba?

Először is van nekünk a Metro bundler

Ahogy a dokumentáció is írja, az Expo CLI a Metro-t használja az npx expo start és npx expo export parancsok során arra, hogy egy tesztelhető csomagot készítsen össze, amit aztán futtatni tudunk a mobilunkon az Expo Go alkalmazással. A Metro a React Native-hoz lett kifejlesztve és optimalizálva a masszív alkalmazások fejlesztéséhez.

Visszatérve a hiba röviden:

A metro bundler nem ismeri fel a commonJS (.cjs) fájlokat az Expo projektekben. Az IDB modul pedig exportál egy index.cjs fájlt, amit a Firebase modul megpróbál elolvasni. Bár a .cjs fájl fizikailag ott van a node_modules könyvtárban, mint az IDB csomag része, a Metro mégsem tudja olvasni azt.

Ezért ahhoz, hogy a Metro bundler képes legyen felismerni a commonJS fájlokat, készíteni kell egy konfigurációs fájlt (lásd később: metro.config.js) a projekt gyökér könyvtárában.

A megoldás

A Firebase telepítése után jelentkezik ez a hiba. Mielőtt az igazi „gyógyírt” megtaláltam volna, a neten találtam például olyan megoldási javaslatot is, hogy tegyünk fel egy régebbi Firebase verziót. Ez végül is logikusnak tűnt.

A Firebase downgradet (alacsonyabb verzióra állást) nem próbáltam. Főként azért sem, mert szerintem a downgrade hosszú távon nem célravezető. A régi cuccok előbb-utóbb elavultak lesznek és végül muszáj lesz átállni a frissebb verzióra. Ez tehát igaz mindenre és nem csak erre a konkrét esetre.

Így megoldási lehetőségek közül azt emelem ki, és hoztam el, ami nekem segített és ami nem egy korábbi Firebase verzió használata volt. Ez pedig a következő:

A projekt gyökér (root) könyvtárában, tehát a package.json fájllal azonos szinten létre kell hozni egy metro.config.js fájlt. Tartalma pedig ez legyen:

const { getDefaultConfig } = require("@expo/metro-config");

const defaultConfig = getDefaultConfig(__dirname);

defaultConfig.resolver.assetExts.push("cjs");

module.exports = defaultConfig;

A csodát igazából ez a sor hozza el:

defaultConfig.resolver.assetExts.push('cjs');

A Metro bundler olyan kis kényes jószág, hogy definiálni kell számára az összes olyan fájlt, amiből futtatható csomagot tud csinálni. Alapból azonban a CJS fájlok nincsenek ebben a listában.

A metro.config.js létrehozása után érdemes restartolni a terminálban a teljes development szervert. Tehát megállítani az éppen futót (CTRL+C), és npx expo start paranccsal ismét elindítani. Meg fog szűnni az „idb module error” hiba és egyúttal a Firebase is használható lesz.

Külső források a megoldáshoz

Címkék: