需求未定义?节点.js

2022-08-30 05:37:25

刚开始使用 Node.js。在我的文件中,我正在执行如下操作:app/js

应用程序.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


答案 1

从版本 14 开始,这现在也可以在 Node.js中发生。

当您在 中将包类型声明为模块时,就会发生这种情况。如果这样做,则无法使用某些 CommonJS 变量,包括 .package.jsonrequire

要解决此问题,请从中删除,并确保没有任何以 结尾的文件。"type": "module"package.json.mjs


答案 2

在终端中,您正在运行节点应用程序,并且它正在运行您的脚本。这与直接在浏览器中运行脚本是一个非常不同的执行环境。虽然Javascript语言基本上是相同的(如果你运行的是Chrome浏览器,两者都是V8),但其余的执行环境(如可用的库)并不相同。

node.js是一个服务器端Javascript执行环境,它将V8 Javascript引擎与一堆服务器端库相结合。 是节点.js添加到环境中的一个此类功能。因此,当您在终端中运行 node 时,您正在运行一个包含 .require()require()

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

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

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


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