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.

Relaterte artikler