Ovaj članak detaljno govori o razlozima nastanka ove pogreške i načinima na koje je možemo popraviti.
Kako riješiti pogrešku 'zahtjev nije definiran' u JavaScript/Node.js?
Referentna pogreška 'require nije pronađen' događa se kada se funkcija require() pronađe u JavaScript datoteci koja je trebala biti izvršena u web pregledniku umjesto u Node.js okruženju.
Što je funkcija require()?
require() funkcija ima globalni opseg i daje je Node.js. Učitava i pokreće module u aplikaciji Node.js. Mnogi preglednici ne podržavaju Node.js pa funkcija require() u njima nije dostupna.
Kada se ova pogreška događa?
Ova se pogreška obično pojavljuje kada se JavaScript koristi u oba preglednika zajedno s Node.js. Greška se može pojaviti na tri načina:
- Kada se funkcija require() koristi u okruženju preglednika.
- Kada se funkcija require() koristi u Node.js i datoteci package.json, tip je postavljen na 'modul'
- Kada se funkcija require() koristi u Node.js, datoteke imaju nastavak .mjs.
Korištenje sintakse const “ mojaDatoteka = zahtijeva('./moja-datoteka') ” u web-baziranom okruženju izbacit će pogrešku koja izgleda ovako:
Raspravljajmo o različitim rješenjima za rješavanje ove pogreške.
Slučaj 1: Greška u okruženju preglednika
Funkcija require() radi posebno u Node.js. Većina preglednika kompatibilna je s Node.js tako da ne podržavaju funkciju require(). Modul za uvoz i izvoz ES6 modula rješava pogrešku 'ReferenceError require is not defined'. Evo primjera koda koji pokazuje kako se to može učiniti:
DOCTYPE html >< tijelo >
< vrsta skripte = 'modul' src = 'index.js' > skripta >
< vrsta skripte = 'modul' src = 'datoteka.js' > skripta >
tijelo >
html >
Index.js se prvi učitava kako bi se njegove funkcionalnosti mogle koristiti u file.js.
index.js datoteka
Index.js definira proizvod funkcije i varijable x i y:
proizvod funkcije izvoza ( a, b ) {povratak a * b ;
}
izvoz konst = 10 ;
izvoz konst i = 'TAYLOR'
datoteka.js
Funkcionalnosti iz datoteke index.js mogu se koristiti u drugoj js datoteci pod nazivom file.js. File.js izgleda ovako:
uvoz { proizvod, x, y } iz './index.js' ;konzola. log ( proizvod ( 10 , 5 ) ) ; // prikazat će 50
konzola. log ( x ) ; // prikazat će 10
konzola. log ( i ) ; // prikazat će 'TAYLOR'
Izlaz
Sljedeći izlaz prikazuje kako se pogreška 'zahtjev nije definiran' u okruženju preglednika može ukloniti korištenjem ES6 modula za uvoz i izvoz:
Slučaj 2: Greška tijekom rada u Node.js
U datoteci package.json postavljanje svojstva tipa s modulom vrijednosti dobiva ovu pogrešku. To se također može dogoditi ako se funkcija require() koristi u datoteci s ekstenzijom .mjs.
Ova se pogreška može ukloniti kada uklonite svojstvo vrste postavljeno na modul i bilo koja datoteka s ekstenzijom .mjs bude preimenovana u .js.
//package.json{
// uklonite svojstvo tipa postavljeno na modul za korištenje require()
'tip' : 'modul' ,
}
index.js datoteka
Datoteka index.js definira funkciju 'product' i varijable x i y s opsegom varijable. Evo kako će izgledati datoteka index.js:
proizvod funkcije ( a, b ) {povratak a * b ;
}
globalno. x = 13 ;
globalno. i = 'brz' ;
modul. izvozi = {
proizvod,
} ;
datoteka.js
Uzima proizvod funkcije iz JS datoteke index.js pomoću ključne riječi require(). Datoteka file.js će izgledati ovako:
konst { proizvod } = zahtijevati ( './index.js' ) ;konzola. log ( proizvod ( 10 , 9 ) ) ; // prikazat će 90
konzola. log ( x ) ; // prikazat će 13
konzola. log ( i ) ; // prikazat će 'swift'
Izlaz
Izlaz prikazuje kako se pogreška 'Zahtjev nije pronađen' može riješiti uklanjanjem svojstva tipa postavljenog na modul iz datoteke package.json:
Stvari koje treba zapamtiti
- Sintaksa ES6 modula za uvoz modula zahtijeva specifičnu ekstenziju datoteke modula. JavaScript bi trebao znati vrstu datoteke za pravilnu obradu.
- Modul ES6 ne može se koristiti istovremeno s funkcijom require().
Zaključak
Korištenje sintakse ES6 modula u pregledniku rješava problem 'zahtjev nije definiran' ili se u suprotnom isječak koda mora pokrenuti u Node.js. Pogreška se događa kada se funkcija require() koristi u pregledniku. Ovaj članak raspravlja o tome kako se problem 'zahtjev nije definiran' može riješiti pomoću primjera.