Dit artikel bespreekt in detail de redenen waarom deze fout optreedt en de manieren waarop we deze kunnen oplossen.
Hoe de ‘require is not gedefinieerd’-fout in JavaScript/Node.js op te lossen?
De referentiefout ‘require is not found’ treedt op wanneer de require()-functie wordt gevonden in het JavaScript-bestand dat in de webbrowser zou moeten worden uitgevoerd in plaats van in de Node.js-omgeving.
Wat is een require()-functie?
require() functie heeft een globaal bereik en wordt gegeven door Node.js. Het laadt en voert modules uit in de Node.js-applicatie. Veel browsers ondersteunen Node.js niet, dus de require()-functionaliteit is daarin niet beschikbaar.
Wanneer treedt deze fout op?
Deze fout treedt meestal op wanneer JavaScript in beide browsers samen met Node.js wordt gebruikt. De fout kan op drie manieren optreden:
- Wanneer de functie require() wordt gebruikt in de browseromgeving.
- Wanneer de functie require() wordt gebruikt in Node.js en het bestand package.json, wordt het type ingesteld op “module”
- Wanneer de functie require() wordt gebruikt in Node.js, hebben de bestanden de extensie .mjs.
Met behulp van de syntaxis const “ mijnBestand = vereisen(‘./mijn-bestand’) ” in een webgebaseerde omgeving zal een foutmelding verschijnen die er als volgt uitziet:
Laten we verschillende oplossingen bespreken om deze fout op te lossen.
Geval 1: Fout in de browseromgeving
De require() functie werkt specifiek in Node.js. De meeste browsers zijn compatibel met Node.js en ondersteunen dus de require()-functionaliteit niet. De import-exportmodule van de ES6-module lost de fout ‘ReferenceError require is not gedefinieerd’ op. Hier is een voorbeeld van een code die laat zien hoe het kan worden gedaan:
DOCTYPEhtml >< lichaam >
< scripttype = 'module' src = 'index.js' > script >
< scripttype = 'module' src = 'bestand.js' > script >
lichaam >
html >
Index.js wordt eerst geladen, zodat de functionaliteiten ervan kunnen worden gebruikt in file.js.
index.js-bestand
De index.js definieert een functieproduct en variabelen x en y:
exportfunctie product ( een, b ) {opbrengst A * B ;
}
exporteren const = 10 ;
exporteren const En = 'TAYLOR'
bestand.js
De functionaliteiten uit het bestand index.js kunnen worden gebruikt in het andere js-bestand met de naam file.js. Bestand.js ziet er als volgt uit:
importeren { product, x, y } van './index.js' ;troosten. loggen ( Product ( 10 , 5 ) ) ; // geeft 50 weer
troosten. loggen ( X ) ; // geeft 10 weer
troosten. loggen ( En ) ; // geeft 'TAYLOR' weer
Uitvoer
De volgende uitvoer laat zien hoe de fout ‘require is not gedefinieerd’ in een browseromgeving kan worden verwijderd met behulp van de ES6 import-exportmodule:
Geval 2: Fout tijdens het werken in Node.js
In het bestand package.json wordt deze fout weergegeven als u de eigenschap type instelt met de waardemodule. Het kan ook gebeuren als de functie require() wordt gebruikt in het bestand met de extensie .mjs.
Deze fout kan worden verwijderd wanneer u de type-eigenschap verwijdert die is ingesteld op de module en elk bestand met de extensie .mjs de naam .js krijgt.
//pakket.json{
// verwijder de type-eigenschap die is ingesteld op de te gebruiken module require()
'type' : 'module' ,
}
index.js-bestand
Het index.js-bestand definieert een functie “product” en de variabelen x en y met de variabele reikwijdte. Hier ziet u hoe het index.js-bestand eruit zal zien:
functieproduct ( een, b ) {opbrengst A * B ;
}
globaal. X = 13 ;
globaal. En = 'snel' ;
module. export = {
Product,
} ;
bestand.js
Het haalt het functieproduct uit het JS-bestand index.js met behulp van het trefwoord require(). Het bestand file.js ziet er als volgt uit:
const { Product } = vereisen ( './index.js' ) ;troosten. loggen ( Product ( 10 , 9 ) ) ; // geeft 90 weer
troosten. loggen ( X ) ; // geeft 13 weer
troosten. loggen ( En ) ; // geeft 'snel' weer
Uitvoer
De uitvoer laat zien hoe de fout ‘Require is not found’ kan worden opgelost door de eigenschap van type set to module uit het package.json-bestand te verwijderen:
Dingen om te onthouden
- De syntaxis van de ES6-module om een module te importeren vereist dat u specifiek bent over de extensie van het modulebestand. JavaScript moet het bestandstype kennen voor een juiste verwerking.
- De ES6-module kan niet gelijktijdig worden gebruikt met de functie require().
Conclusie
Door de syntaxis van de ES6-module in de browser te gebruiken, wordt het probleem 'vereist is niet gedefinieerd' opgelost, anders moet het codefragment worden uitgevoerd in Node.js. De fout treedt op wanneer de functie require() in een browser wordt gebruikt. In dit artikel wordt aan de hand van een voorbeeld besproken hoe het probleem ‘vereiste is niet gedefinieerd’ kan worden opgelost.