一尘不染

要求没有定义?Node.js

node.js

刚开始使用Node.js。在我的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!');

当我在终端中运行时node app.js,控制台会弹出'running server!',但在浏览器中却显示Uncaught ReferenceError: require is not defined

有人可以向我解释为什么在终端中可以正常运行,但在浏览器中却不能正常运行吗?

我正在使用节点的http-server服务我的页面。


阅读 275

收藏
2020-07-07

共1个答案

一尘不染

在终端中,您正在运行节点应用程序,并且正在运行脚本。与直接在浏览器中运行脚本相比,这是一个非常不同的执行环境。尽管Javascript语言基本相同(如果您运行的是Chrome浏览器,则均为V8),但其余执行环境(例如可用的库)则不同。

node.js是一个服务器端Javascript执行环境,它结合了V8 Javascript引擎和许多服务器端库。
require()是node.js添加到环境中的一项功能。因此,当您在终端中运行node时,您正在运行一个包含的环境require()

require()不是浏览器内置的功能。那是node.js的特定功能,而不是浏览器的功能。因此,当您尝试让浏览器运行脚本时,它没有require()

有一些方法可以在浏览器中运行某些形式的node.js代码(但不是全部)。例如,您可以以require()类似的方式(尽管不完全相同)获得浏览器替代品。

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


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

2020-07-07