2015-08-11 10 views
23

iniziato a lavorare con nodej.srichiedono non è definito? node.js

Nel mio file app/js, sto facendo qualcosa di simile

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!'); 

Quando sono nel mio terminale ed eseguite node app.js

La console sputa 'running server!'

Ma nel mio browser ottengo, Uncaught ReferenceError: require is not defined

Qualcuno può spiegarmi perché nel terminale funziona correttamente ma nel browser non funziona?

Sto usando npm http-server per servire la mia pagina.

+4

Stai ... eseguendo quel file js nel browser? Non sei destinato a farlo ... – david

risposta

20

Nel terminale, si sta eseguendo l'applicazione nodo e si sta eseguendo lo script. Questo è un ambiente di esecuzione molto diverso rispetto all'esecuzione diretta dello script nel browser. Mentre la lingua Javascript è in gran parte la stessa (sia V8 se stai eseguendo il browser Chrome), il resto dell'ambiente di esecuzione come le librerie disponibili non sono le stesse.

node.js è un ambiente di esecuzione Javascript lato server che combina il motore Javascript V8 con un mucchio di librerie lato server. require() è una di queste funzionalità che node.js aggiunge all'ambiente. Quindi, quando si esegue il nodo nel terminale, si sta eseguendo un ambiente che contiene require().

require() non è una funzionalità integrata nel browser. Questa è una caratteristica specifica di node.js, non di un browser. Quindi, quando cerchi di far funzionare il tuo script, il browser non ha require().

Esistono modi per eseguire alcune forme di codice node.js in un browser (ma non tutte). Ad esempio, è possibile ottenere sostituti del browser per require() che funzionano in modo simile (anche se non identicamente).

Tuttavia, non eseguirai un server web nel tuo browser in quanto non è qualcosa che il browser ha la capacità di fare.


Potreste essere interessati a browserify che permette di utilizzare moduli di nodo in stile in un browser utilizzando require() dichiarazioni.

35

Node.JS è una tecnologia lato server, non una tecnologia browser. Pertanto, le chiamate specifiche dei nodi, come require(), non funzionano nel browser.

Vedere browserify o webpack se si desidera utilizzare moduli specifici del browser dal nodo.