要求没有定义? 的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()
语句来使用节点式模块。