问题描述

刚开始使用 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服务我的页面

解决思路一:

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

当您将包类型声明package.json. 如果这样做,某些 CommonJS 变量将无法使用,包括require.

解决问题"type": "module"请从您的package.json文件删除并确保您没有任何以.mjs.

若遇到问题解决参考

解决思路二:

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

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

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

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

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

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

解决思路三:

正如 Abel 所说,默认情况下Node >= 14中的 ES 模块不再具有require

如果要添加它,请将以下代码放在文件顶部

以上仅为部分解决思路介绍,查看全部内容,请添加公众号后回复001即可查看

原文地址:https://blog.csdn.net/qq_38334677/article/details/125960437

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_29262.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注