W tym artykule szczegółowo omówiono przyczyny wystąpienia tego błędu i sposoby jego naprawienia.
Jak rozwiązać błąd „wymaganie nie jest zdefiniowane” w JavaScript/Node.js?
Błąd referencyjny „require not found” ma miejsce w przypadku odnalezienia funkcji require() w pliku JavaScript, który miał zostać wykonany w przeglądarce internetowej, a nie w środowisku Node.js.
Co to jest funkcja require()?
Funkcja require() ma zasięg globalny i jest udostępniana przez Node.js. Ładuje i uruchamia moduły w aplikacji Node.js. Wiele przeglądarek nie obsługuje Node.js, więc funkcja require() nie jest w nich dostępna.
Kiedy pojawia się ten błąd?
Ten błąd zwykle występuje, gdy w obu przeglądarkach używany jest JavaScript wraz z Node.js. Błąd może wystąpić na trzy sposoby:
- Gdy w środowisku przeglądarki używana jest funkcja require().
- Gdy funkcja require() jest używana w Node.js i pliku package.json, typ jest ustawiony na „module”
- Gdy w Node.js używana jest funkcja require(), pliki mają rozszerzenie .mjs.
Używając składni const „ mójPlik = wymagaj („./mój-plik”) ” w środowisku internetowym spowoduje wyświetlenie błędu wyglądającego następująco:
Omówmy różne rozwiązania, aby rozwiązać ten błąd.
Przypadek 1: Błąd w środowisku przeglądarki
Funkcja require() działa szczególnie w Node.js. Większość przeglądarek jest kompatybilna z Node.js, więc nie obsługują funkcji require(). Moduł eksportu importu modułu ES6 rozwiązuje błąd „Wymagany błąd odniesienia nie jest zdefiniowany”. Oto przykład kodu pokazującego, jak można to zrobić:
DOCTYPEhtml >< ciało >
< typ skryptu = 'moduł' źródło = „indeks.js” > scenariusz >
< typ skryptu = 'moduł' źródło = „plik.js” > scenariusz >
ciało >
HTML >
Najpierw ładowany jest plik Index.js, dzięki czemu jego funkcjonalności można wykorzystać w pliku.js.
plik indeks.js
Index.js definiuje iloczyn funkcji oraz zmienne x i y:
produkt z funkcją eksportu ( a, b ) {powrót A * B ;
}
eksport konst = 10 ;
eksport konst I = „TAJLOR”
plik.js
Funkcjonalności z pliku Index.js można wykorzystać w innym pliku js o nazwie file.js. Plik.js wygląda następująco:
import { produkt, x, y } z „./index.js” ;konsola. dziennik ( produkt ( 10 , 5 ) ) ; // wyświetli 50
konsola. dziennik ( X ) ; // wyświetli 10
konsola. dziennik ( I ) ; // wyświetli „TAYLOR”
Wyjście
Poniższe dane wyjściowe pokazują, jak można usunąć błąd „wymaganie nie jest zdefiniowane” w środowisku przeglądarki za pomocą modułu eksportu importu ES6:
Przypadek 2: Błąd podczas pracy w Node.js
W pliku package.json ustawienie właściwości type za pomocą modułu wartości powoduje wystąpienie tego błędu. Może się to również zdarzyć, jeśli w pliku z rozszerzeniem .mjs zostanie użyta funkcja require().
Ten błąd można usunąć, usuwając ustawioną dla modułu właściwość type i zmieniając nazwę dowolnego pliku z rozszerzeniem .mjs na .js.
//pakiet.json{
// usuń właściwość type ustawioną dla modułu, aby użyć funkcji require()
'typ' : 'moduł' ,
}
plik indeks.js
W pliku Index.js zdefiniowana jest funkcja „produkt” oraz zmienne x i y z zakresem zmiennej. Oto jak będzie wyglądał plik Index.js:
produkt funkcjonalny ( a, b ) {powrót A * B ;
}
światowy. X = 13 ;
światowy. I = 'szybki' ;
moduł. eksport = {
produkt,
} ;
plik.js
Pobiera produkt funkcji z pliku JS indeks.js za pomocą słowa kluczowego require(). Plik file.js będzie wyglądał następująco:
konst { produkt } = wymagać ( „./index.js” ) ;konsola. dziennik ( produkt ( 10 , 9 ) ) ; // wyświetli 90
konsola. dziennik ( X ) ; // wyświetli 13
konsola. dziennik ( I ) ; // wyświetli „szybkie”
Wyjście
Dane wyjściowe pokazują, jak można rozwiązać błąd „Nie znaleziono wymagania”, usuwając właściwość typu ustawioną na moduł z pliku package.json:
Rzeczy do zapamiętania
- Składnia modułu ES6 do importowania modułu wymaga określenia rozszerzenia pliku modułu. JavaScript powinien znać typ pliku, aby móc go poprawnie przetworzyć.
- Modułu ES6 nie można używać jednocześnie z funkcją require().
Wniosek
Użycie składni modułu ES6 w przeglądarce rozwiązuje problem „wymaganie nie jest zdefiniowane” lub w przeciwnym razie fragment kodu musi zostać uruchomiony w Node.js. Błąd występuje, gdy w przeglądarce używana jest funkcja require(). W tym artykule omówiono, jak na przykładzie można rozwiązać problem „wymagania nie są zdefiniowane”.