Ostatnio potrzebowałem kawałka kodu do sprawdzenia, czy moduł o jakiejś nazwie jest dostępny w projekcie NodeJS.

Chodziło akurat o mockowanie modułów przy pomocy biblioteki jest w module pomocniczym, który możemy zaimportować do innego projektu, gdzie akurat może nie być części zależności.

W tym przypadku biblioteka mockuje zależność firebase i firebase-admin, podczas gdy u nas w projekcie używamy tylko firebase-admin. A jest rzuca wyjątek, bardzo słusznie zresztą, jeśli każemy mu zamockować moduł, którego nie może znaleźć.

Najlepszym rozwiązaniem, jakie znalazłem, było użycie funkcji require.resolve.

Funkcja ta rozwiązuje ścieżkę do modułu, ale nie ładuje go niepotrzebnie, tylko zwraca do niego ścieżkę. Jeśli nie znajdzie modułu, to rzuca wyjątkiem. Można więc zrobić coś typu:

try {
  require.resolve(moduleName);
  // do something
} catch (e) {
  // not found, console.info etc.
}