Kuinka ratkaista 'viitevirhevaatimusta ei ole määritetty' -virhe?

Kuinka Ratkaista Viitevirhevaatimusta Ei Ole Maaritetty Virhe



Node.js ei ole sinänsä mitään, sen olemassaolo riippuu kunkin moduulin tarjoamista moduuleista ja menetelmistä. Voidakseen työskennellä näiden moduulien kanssa kehittäjän on ensin asennettava se ja sitten tuotava se parhaillaan toimivaan tiedostoon. Moduulien tuontia varten on kaksi tapaa, jotka on erityisesti linkitetty kehittäjän nyt käyttämään JavaScript-versioon tai johon sovelluksen omistaja haluaa rakentaa. Tuonnin aikana on mahdollista kohdata useita virheitä ja yksi suosituin ja yleisin virhe, joka liittyy ' vaatia() ”-menetelmää kuvataan ja ratkaistaan.

Tässä oppaassa selitetään 'ReferenceError: vaaditaan ei ole määritelty' -virheiden ratkaiseminen.

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. js

Luotu 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