javascript - require er ikke definert? Node.js
Har nettopp begynt å jobbe med Node.js. I min app/js-fil gjør jeg noe som dette:
app.js
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Am I really running a server?!');
}).listen(8080, '127.0.0.1');
console.log('running server!');
Når jeg er i terminalen min og kjører node app.js, skriver konsollen ut 'running server!', men i nettleseren får jeg Uncaught ReferenceError: require is not defined.
Kan noen forklare meg hvorfor det fungerer riktig i terminalen, men ikke i nettleseren?
Jeg bruker Node sin http-server for å servere siden min.
Svar #1
Dette kan nå også skje i Node.js fra og med versjon 14.
Det skjer når du erklærer pakketypen din som modul i package.json. Hvis du gjør dette, kan visse CommonJS-variabler ikke brukes, inkludert require.
For å fikse dette, fjern "type": "module" fra din package.json og sørg for at du ikke har noen filer som slutter med .mjs.
Svar #2
Som Abel sa, har ES-moduler i Node >= 14 ikke lenger require som standard.
Hvis du vil legge det til, sett denne koden øverst i filen din:
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
Kilde: https://nodejs.org/api/modules.html#modules_module_createrequire_filename
Svar #3
I terminalen kjører du Node-applikasjonen, og den kjører skriptet ditt. Dette er et veldig annerledes kjøremiljø enn å kjøre skriptet ditt direkte i nettleseren. Mens JavaScript-språket for det meste er det samme (begge bruker V8 hvis du kjører Chrome-nettleseren), er resten av kjøremiljøet, som tilgjengelige biblioteker, ikke det samme.
node.js er et server-side Javascript-kjøremiljø som kombinerer V8 Javascript-motoren med en rekke server-side biblioteker. require() er en slik funksjon som node.js legger til i miljøet. Så når du kjører node i terminalen, kjører du et miljø som inneholder require().
require() er ikke en funksjon som er innebygd i nettleseren. Det er en spesifikk funksjon i node.js, ikke i en nettleser. Så når du prøver å få nettleseren til å kjøre skriptet ditt, har den ikke require().
Det finnes måter å kjøre noen former for node.js-kode i en nettleser på (men ikke alle). For eksempel kan du få nettleser-erstatninger for require() som fungerer på lignende måte (selv om ikke identisk).
Men du vil ikke kjøre en webserver i nettleseren din, da det ikke er noe nettleseren har kapasitet til å gjøre.
Du kan være interessert i browserify som lar deg bruke node-stil moduler i en nettleser ved å bruke require()-setninger.
Svar #4
Node.JS er en server-side-teknologi, ikke en nettleserteknologi. Dermed fungerer ikke Node-spesifikke funksjoner, som require(), i nettleseren.
Se på browserify eller webpack hvis du ønsker å levere nettleserspesifikke moduler fra Node.
