要求没有定义?节点.js

IT技术 javascript node.js google-chrome
2021-01-18 06:39:12

刚开始使用 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来为我的页面提供服务。

6个回答

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

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

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

您还可以将文件扩展名重命名为 .cjs
2021-03-17 06:39:12
我正在使用 nvm,所以我从节点 14 切换到节点 10,并且此错误已修复。
2021-03-23 06:39:12
使用 Node 14,"type": "module"从 package.json results 中取出(node:7396) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs我没有任何 .mjs
2021-03-31 06:39:12
您仍然可以使用createRequire在module中使用 require
2021-04-05 06:39:12
项目文件夹中的任何内容都可能发生这种情况。所以,如果你有写无关的构建脚本CommonJS进口,而是一个project.json具有"type": "module",那么构建脚本将打破,即使它没有被引用package.json
2021-04-12 06:39:12

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

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

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

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

但是,您不会在浏览器中运行 Web 服务器,因为浏览器没有能力这样做。


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

@HasinduDahanayake - 那个煽动性声明的重点是什么?JS 是一种非常真实的面向对象语言。语言中的一切都是带有方法的对象,带有类,并具有扩展类或对象的能力。它是松散类型的,但这并没有减少它的面向对象。
2021-03-25 06:39:12
@N73k - 我不会认为这是一个严肃的问题。如果您想了解 node.js,它是什么以及人们使用它的目的是什么,这是一个完全不同的主题,您可以先在网络上进行自己的搜索并找到各种文章。Javascript 是一种真正的 OOP 语言。也许与您认为想要的不同,但这只是您的意见,并且有许多人出于各种原因不同意您的意见。这不是辩论或讨论的地方。
2021-04-03 06:39:12

Node.JS 是一种服务器端技术,而不是浏览器技术。因此,特定于节点的调用(如 )require()在浏览器中不起作用。

browserify的WebPack如果你想从节点服务的浏览器专用module。

不知道您的特定配置,我无能为力。最好针对您的具体问题创建一个新问题。
2021-03-23 06:39:12
我有同样的问题并安装了 browserify 和 webpack 但问题仍然存在!!
2021-03-29 06:39:12

正如 Abel 所说,Node >= 14 中的ES modulerequire默认不再具有

如果要添加它,请将此代码放在文件的顶部:

import { createRequire } from 'module';
const require = createRequire(import.meta.url);

来源:https : //nodejs.org/api/modules.html#modules_module_createrequire_filename

我们如何在 TypeScript 中添加它,以便它在我们编译后的 JS 中添加它?
2021-03-19 06:39:12

Point 1:Add require()函数调用的代码行只在app.js文件或main.js文件中。

第 2 点:通过检查pacakage.json文件确保安装了所需的包如果未更新,请运行“npm i”。