要求没有定义? 的node.js

开始使用nodej.s

在我的app / js文件中,我正在做这样的事情

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

当我在我的terminal,并运行node app.js

控制台吐出'running server!'

但是在我的浏览器中,我得到了Uncaught ReferenceError: require is not defined

有人可以向我解释为什么在terminal,它工作正常,但在浏览器中,它不?

我使用npm http-server来服务我的页面。

Node.JS是服务器端技术,而不是浏览器技术。 因此,特定于节点的调用(如require()在浏览器中不起作用。

如果您希望为Node提供特定于浏览器的模块,请参阅browserify或webpack 。

在terminal中,您正在运行节点应用程序,并正在运行您的脚本。 这是一个非常不同的执行环境,而不是直接在浏览器中运行你的脚本。 虽然Javascript语言基本相同(如果您使用的是Chrome浏览器,则都是V8),但其他执行环境(如可用库)则不尽相同。

node.js是一个服务器端JavaScript执行环境,它将V8 Javascript引擎与一堆服务器端库结合在一起。 require()是node.js添加到环境中的一个function。 所以,当你在terminal中运行节点时,你正在运行一个包含require()的环境。

require()不是内置在浏览器中的function。 这是node.js的一个特殊function,而不是浏览器。 所以,当你试图让浏览器运行你的脚本时,它没有require()

有一些方法可以在浏览器中运行某些forms的node.js代码(但不是全部)。 例如,可以使用类似(但不完全相同)的require()来替代浏览器。

但是,您不会在浏览器中运行Web服务器,因为这不是浏览器能够执行的操作。


您可能对browserify感兴趣,它允许您在浏览器中使用require()语句来使用节点式模块。