Tässä oppaassa selitetään 'ReferenceError: vaaditaan ei ole määritelty' -virheiden ratkaiseminen.
- Kuinka ratkaista 'ReferenceError: vaaditaan ei ole määritelty' -virhe?
- Syy 1: Sovellustyypiksi on asetettu Moduuli
- Ratkaisu: Poista 'Tyyppi'-avain
- Syy 2: Työskentely tiedostossa '.mjs ” Tiedosto
- Ratkaisu: Muunna tiedostopääte muotoon '.cjs'
- Vaihtoehtoinen lähestymistapa: Käytä ES6-lausetta 'tuonti/vienti'
Kuinka ratkaista 'ReferenceError: vaaditaan ei ole määritelty' -virhe?
Ulkoisten tai sisäänrakennettujen moduulien tuomiseksi projektiin käytetään kahta lähestymistapaa, jotka käyttävät ' vaatia() 'menetelmä tai ' tuonti 'avainsana. Mainittu ' ReferenceError: edellytystä ei ole määritetty ' kohtaa, kun käyttäjä yrittää käyttää ' vaatia() 'menetelmä' ES-moduuli ”laajuus. Käsitelty virhe näkyy tältä konsolissa node.js:ssa, kun alla mainittu koodi suoritetaan:
'Ratkaise 'ReferenceError: ei ole määritelty' -virheen syyt ja niitä vastaavat ratkaisut selitetään alla olevissa osioissa.
Syy 1: Sovelluksen tyypiksi on asetettu Moduuli
Jos sovelluksesi näyttää mainitun virheen, helpoin ja pitkäkestoisin ratkaisu on muuttaa ' package.json ” tiedosto. Etsi avain/arvo-pari, jolla on ' avain '/' tyyppi ' ja määritetty arvo ' moduuli ”. Tämä tekee koko sovelluksen ympäristöstä modulaarisen, mikä estää vanhojen ' CommonJS ” moduulit ja menetelmät. Tämän avain/arvo-parin visuaalinen esitys näyttää tältä:
'tyyppi' : 'moduuli' ,
Ratkaisu: Poista 'Tyyppi'-avain
Ratkaisu on poistaa ' tyyppi ”-avain ja määritetty arvo node.js-projektista ” package.json ” tiedosto. Poistaminen 'package.json'-tiedostosta hyödyntää ES6-moduulin laajuutta ja tekee 'require()-menetelmästä toimivan. Nyt kun sama koodi suoritetaan uudelleen, virhettä ei tapahdu.
Syy 2: Työskentely '.mjs ” Tiedosto
' .mjs ” on moduulin JavaScript-lähdekooditiedosto. Se sisältää koodia moduuliympäristön sisällä, ei ' CommonJS ', joka jakaa koodin useisiin tiedostoihin hallittavuuden parantamiseksi. ' vaatia() 'menetelmä sijaitsee '' CommonJS ”. Siksi 'require' -menetelmästä tulee määrittelemätön, kun sitä käytetään ' .mjs ” tiedostopääte ja johtaa mainitun virheen esiintymiseen:
Ratkaisu: Muunna tiedostopääte muotoon '.cjs'
Aivan kuten modulaarisen JavaScript-lähdekoodin tiedostopääte ' .mjs ' on käytettävissä. ' .cjs ' on tarkoitettu ' CommonJS ” moduulit ja ominaisuudet. Tämä tiedosto ei hyväksy ' modulaarinen ' paketteja kuten ' tuonti ', mutta toimii hyvin ES5-versioiden kanssa. Meidän tapauksessamme muuttuva tiedostopääte ratkaisee ongelman, joka liittyy ' vaatia() 'menetelmä:
Vaihtoehtoinen lähestymistapa: Käytä ES6-lausetta 'tuonti/vienti'
' vaatia() ' -menetelmän määrittelee ja tarjoaa ' CommonJs ” ja se on hyväksyttävissä ES5:n JavaScript-versioon asti (ECMAScript 5). Se julkaistiin vuonna 2009 ja on nyt vanhentunut, koska monet uusimmat moduulit eivät tue sitä tai eivät toimi kunnolla ES5:ssä. Aivan kuten ' vaatia() 'menetelmä korvataan nyt optimoidulla ja helpommalla' tuonti ” lausunnot. Molempien kokonaisuuksien toiminta on sama, mutta 'tuonnilla' on yläreuna uusimman teknologian ja sen tarjoaman helpomman ansiosta.
Oletus- tai ulkoisille moduuleille
Alla olevassa esittelyssä 'import'-käskyä käytetään vaihtoehtona 'require()'-menetelmälle oletus- tai kolmannen osapuolen moduulin tuomiseksi:
tuonti readlineObj alkaen 'Lue rivi' ;konsoli. Hirsi ( readlineObj ) ;
Mainitun koodin kääntämisen jälkeen sama tehtävä, joka on suoritettava ' vaatia() ' -menetelmä suoritetaan ja ' ReferenceError: edellytystä ei ole määritetty ' ei myöskään näy:
Räätälöityjä moduuleja varten
' tuonti ”-lausetta käytetään myös mukautettujen moduulien tai toimintojen ”tuomiseen” muista samassa tai eri hakemistoissa olevista tiedostoista. Funktiot tai muuttujat muista tiedostoista viedään käyttämällä ' viedä ”avainsana. Käy esimerkiksi alla olevassa koodinpätkässä, jossa yksi funktio ja satunnaismuuttuja tuodaan toisesta tiedostosta:
app.js
konst exportVariable = 'Tämän oppaan tarjoaa Linuxhint!' ;konst vientitoiminto = ( ) => {
konsoli. Hirsi ( exportVariable ) ;
} ;
viedä oletuksena vientitoiminto ;
viedä {
exportVariable
} ;
Yllä olevan koodilohkon selitys on seuraava:
- Ensin satunnaismuuttuja nimeltä ' exportVariable ' on määritelty ja nuolifunktio' exportFunction() ' luodaan, joka tulostaa luodun 'exportVariable':n konsolin yli.
- avainsanat ' viennin oletusarvo ' ja ' viedä ' käytetään viemään ' exportFunction() ' ja ' exportVariable ” entiteetit tiedostosta.
- Kun tämä tiedosto tuodaan, viety funktio ja muuttujat ovat käytettävissä siellä.
index.js
'Index.js' on toissijainen tiedostomme, jossa viety funktio ja muuttuja tuodaan ja käytetään, se sisältää alla olevan koodin:
tuonti vientitoiminto, { exportVariable } alkaen './app.js' ;vientitoiminto ( ) ;
konsoli. Hirsi ( exportVariable ) ;
Yllä olevassa koodissa ' tuonti '-lausetta käytetään tuomaan oletus' exportFunction() ' ja muuttuja ' exportVariable ' alkaen ' app.js ” tiedosto.
Sitten molemmat tuodut entiteetit kutsutaan ja näytetään konsolin päällä vahvistusta varten.
Suorita nyt pää' index.js '-tiedosto käyttämällä alla olevaa komentoa:
solmuindeksi. jsLuotu tulos osoittaa, että tuodut elementit toimivat oikein aiheuttamatta ' ReferenceError: edellytystä ei ole määritetty ”virhe:
Siinä on kyse määritellyn virheen ratkaisemisesta.
Johtopäätös
ratkaistaksesi ' ReferenceError: edellytystä ei ole määritetty ' virhe, poista ' tyyppi '-avain, jonka arvo on ' moduuli ' alkaen ' package.json ' tai muuta tällä hetkellä toimivaksi tiedostotunnisteeksi ' .cjs ”. Jos haluat työskennellä ES6-moduuliversiossa, käytä ' vaatia() ' -menetelmää käytä ' tuonti ” lausunnot lähestyvät. Tässä oppaassa on selitetty mahdolliset korjaukset ' ReferenceError: edellytystä ei ole määritetty 'virhe' tiedostossa node.js