Chrome 要求未定义?Node.js [duplicate]

azpvetkf  于 2022-12-06  发布在  Go
关注(0)|答案(9)|浏览(254)

此问题在此处已有答案

Client on Node.js: Uncaught ReferenceError: require is not defined(11个答案)
两个月前关门了。
我刚开始使用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来提供页面。

qrjkbowd

qrjkbowd1#

从版本14开始,Node.js中也会出现这种情况。
当你在package.json中声明你的包类型为模块时,就会发生这种情况。如果你这样做,某些CommonJS变量就不能使用了,包括require
要解决此问题,请从package.json中删除"type": "module",并确保您没有任何以.mjs结尾的文件。

tquggr8v

tquggr8v2#

在终端中,你运行的是节点应用程序,它运行的是你的脚本。这与直接在浏览器中运行脚本有很大的不同。虽然Javascript语言大体上是相同的(如果你运行的是Chrome浏览器,两者都是V8),但执行环境的其他部分(如可用的库)是不同的。
node.js是一个服务器端Javascript执行环境,它将V8 Javascript引擎与一系列服务器端库相结合。require()是node.js添加到该环境中的一个特性。因此,当您在终端中运行node时,您正在运行一个包含require()的环境。
require()不是内置在浏览器中的功能。这是node.js的特定功能,而不是浏览器的特定功能。因此,当您尝试让浏览器运行脚本时,它没有require()
有一些方法可以在浏览器中运行某些形式的node.js代码(但不是全部)。例如,您可以使用类似的浏览器替代require()(虽然不是完全相同)。
但是,您不会在浏览器中运行Web服务器,因为这不是浏览器所能做到的。
您可能会对browserify感兴趣,它允许您使用require()语句在浏览器中使用节点样式的模块。

0vvn1miw

0vvn1miw3#

正如Abel所说,Node〉= 14中的ES模块在默认情况下不再有require
如果您想添加它,请将以下代码放在文件的顶部:

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

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

k0pti3hp

k0pti3hp4#

Node.JS是一种服务器端技术,而不是浏览器技术。因此,特定于节点的调用,如require(),在浏览器中不起作用。
如果希望从节点提供特定于浏览器的模块,请参阅browserifywebpack

rur96b6h

rur96b6h5#

只要从package.json中删除“type”:“module”就可以了。我希望这会对你有所帮助😊。

tpgth1q7

tpgth1q76#

点1:Add require()函数调用的代码行只能在app.js文件或main.js文件中。
第2点:通过检查pacakage.json文件来确保所需的软件包已经安装。如果没有更新,运行“npm i”。

4xrmg8kj

4xrmg8kj7#

我的错误:我安装了ESLint到我的项目,并犯了一个错误,当我填写问卷,并选择了错误类型的模块)也许这将有助于某人))
您的项目使用什么类型的模块?· * commonjs

llew8vvj

llew8vvj8#

我通过从package.json文件中删除下面一行来解决这个问题

"type": "module"

希望它能解决问题。

7fhtutme

7fhtutme9#

我通过以下步骤来解决这个问题:-
步骤1:在项目根目录下创建addRequire.js文件。
步骤2:在addRequire.js中添加以下代码行

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

global.require = require; //this will make require at the global scobe and treat it like the original require

步骤3:我在app.js文件头导入了文件

import "./start/addRequire.js";

现在您在整个项目中除了import之外还有require,并且可以在任何地方使用这两个函数。

相关问题