运行node app.js 错误:Uncaught ReferenceError: require is not defined

问题描述:

刚开始使用 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.


若遇到问题的解决参考:

  • 项目文件夹中的任何内容都可能发生这种情况。因此,如果您有一个不相关的构建脚本,它是用CommonJSimport 编写的,但带有project.jsonwith "type": "module",那么构建脚本将会中断,即使它没有在package.json.

  • 您仍然可以使用createRequire在模块中使用 require 

  • 我正在使用 nvm,所以我从节点 14 切换到节点 10,并且此错误已修复。 

  • 您还可以将文件扩展名重命名为.cjs 

  • "type": "module"使用 Node 14,从 package.json 结果中取出(node:7396) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs。我没有任何 .mjs

  • 这样你就不能用了import。

解决思路二:

在终端中,您正在运行节点应用程序并且它正在运行您的脚本。这是一个与直接在浏览器中运行脚本截然不同的执行环境。虽然 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,即可查看。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用\[1\]中的错误信息表明在代码中使用了require函数,但是该函数在浏览器环境中是不可用的。require函数是Node.js中用于引入模块的函数,而浏览器中没有这个函数。所以在浏览器中使用require函数会导致"Uncaught ReferenceError: require is not defined"错误。 引用\[2\]中提到,在终端中运行"node app.js"时,控制台会输出"running server!",这说明在Node.js环境中运行是正常的。但是在浏览器中运行时,会出现"Uncaught ReferenceError: require is not defined"错误。 引用\[3\]中的代码是一个Node.js的服务器代码,使用了require函数来引入http模块。这段代码只能在Node.js环境中运行,而不能在浏览器中运行。 根据以上信息,可以得出结论:在浏览器中使用require函数是不可行的,因为浏览器不支持该函数。如果你想在浏览器中运行代码,需要使用浏览器支持的方式来引入模块或者使用其他适合浏览器环境的方法来实现你的需求。 #### 引用[.reference_title] - *1* [electron-vue报错:(index):1 Uncaught ReferenceError: require is not defined at (index):1](https://blog.csdn.net/weixin_46205984/article/details/120172271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [运行node app.js 错误Uncaught ReferenceError: require is not defined](https://blog.csdn.net/qq_38334677/article/details/125960437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快撑死的鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值