Selles artiklis käsitletakse üksikasjalikult selle vea ilmnemise põhjuseid ja selle parandamise viise.
Kuidas lahendada JavaScripti/Node.js-i viga „nõue pole määratletud”?
Viiteviga 'require'i ei leitud' ilmneb siis, kui JavaScripti failist leitakse funktsioon request(), mis pidi käivitama veebibrauseris Node.js keskkonna asemel.
Mis on nõutav() funktsioon?
Funktsiooni request() ulatus on globaalne ja selle annab Node.js. See laadib ja käivitab moodulid rakenduses Node.js. Paljud brauserid ei toeta Node.js-i, mistõttu ei ole funktsioon request() neis saadaval.
Millal see viga ilmneb?
See tõrge ilmneb tavaliselt siis, kui JavaScripti kasutatakse mõlemas brauseris koos Node.js-iga. Viga võib ilmneda kolmel viisil:
- Kui brauseri keskkonnas kasutatakse funktsiooni request().
- Kui failis Node.js ja failis package.json kasutatakse funktsiooni request(), määratakse tüübiks „moodul”
- Kui failis Node.js kasutatakse funktsiooni request(), on failide laiend .mjs.
Kasutades süntaksi const ' myFile = nõuda('./minu-fail') ” ilmub veebipõhises keskkonnas veateade, mis näeb välja järgmine:
Arutame selle vea lahendamiseks erinevaid lahendusi.
1. juhtum: viga brauseri keskkonnas
Funktsioon request() töötab konkreetselt failis Node.js. Enamik brausereid ühildub Node.js-iga, nii et need ei toeta nõue()-funktsiooni. ES6 mooduli impordi ekspordi moodul lahendab tõrke „ReferenceError nõuet pole määratletud”. Siin on näide koodist, mis näitab, kuidas seda teha:
DOCTYPE html >< keha >
< skripti tüüp = 'moodul' src = 'index.js' > stsenaarium >
< skripti tüüp = 'moodul' src = 'fail.js' > stsenaarium >
keha >
html >
Index.js laaditakse esmalt, et selle funktsioone saaks failis file.js kasutada.
index.js faili
Indeks.js määratleb funktsiooni toote ning muutujad x ja y:
ekspordifunktsiooniga toode ( a, b ) {tagasi a * b ;
}
eksportida konst = 10 ;
eksportida konst ja = 'TAYLOR'
fail.js
Faili index.js funktsioone saab kasutada ka teises js-failis, mille nimi on file.js. File.js näeb välja selline:
importida { toode, x, y } alates './index.js' ;konsool. logi ( toode ( 10 , 5 ) ) ; // kuvab 50
konsool. logi ( x ) ; // kuvab 10
konsool. logi ( ja ) ; // kuvab 'TAYLOR'
Väljund
Järgmises väljundis kuvatakse, kuidas saab ES6 impordi ekspordimooduli abil brauserikeskkonnas tõrke 'nõutav pole määratletud' eemaldada:
2. juhtum: viga rakenduses Node.js töötamisel
Failis package.json annab selle tõrke tüübi atribuudi määramisel väärtusmooduliga. See võib juhtuda ka siis, kui failis, mille laiend on .mjs, kasutatakse funktsiooni request().
Selle vea saab eemaldada, kui eemaldate moodulile määratud tüübiatribuudi ja mis tahes faili laiendiga .mjs nimetatakse ümber .js-ks.
//package.json{
// eemaldage moodulile seatud atribuutide tüüp, et kasutada request()
'tüüp' : 'moodul' ,
}
index.js faili
Fail index.js määratleb funktsiooni 'product' ning muutujad x ja y muutuja ulatusega. Fail index.js näeb välja järgmine:
funktsioon toode ( a, b ) {tagasi a * b ;
}
globaalne. x = 13 ;
globaalne. ja = 'kiire' ;
moodul. eksporti = {
toode,
} ;
fail.js
See võtab funktsioonitoote JS-failist index.js, kasutades selleks märksõna nõudmist(). Fail file.js näeb välja selline:
konst { toode } = nõuda ( './index.js' ) ;konsool. logi ( toode ( 10 , 9 ) ) ; // kuvab 90
konsool. logi ( x ) ; // kuvatakse 13
konsool. logi ( ja ) ; // kuvab 'swift'
Väljund
Väljund kuvab, kuidas tõrke 'Nõua ei leitud' saab lahendada, eemaldades failist package.json atribuudi, mille tüüp on seatud moodulile:
Asjad, mida meeles pidada
- ES6 mooduli süntaks mooduli importimiseks nõuab mooduli faili laienduse spetsiifilisust. JavaScript peaks selle õigeks töötlemiseks teadma failitüüpi.
- ES6 moodulit ei saa kasutada samaaegselt funktsiooniga request().
Järeldus
ES6 mooduli süntaksi kasutamine brauseris lahendab probleemi 'nõua pole määratletud' või muul juhul tuleb koodilõik käivitada failis Node.js. Viga ilmneb siis, kui brauseris kasutatakse funktsiooni request(). Selles artiklis arutati, kuidas saab näite abil lahendada probleemi „nõutav ei ole määratletud”.