此问题在此处已有答案:
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
来提供页面。
9条答案
按热度按时间qrjkbowd1#
从版本14开始,Node.js中也会出现这种情况。
当你在
package.json
中声明你的包类型为模块时,就会发生这种情况。如果你这样做,某些CommonJS变量就不能使用了,包括require
。要解决此问题,请从
package.json
中删除"type": "module"
,并确保您没有任何以.mjs
结尾的文件。tquggr8v2#
在终端中,你运行的是节点应用程序,它运行的是你的脚本。这与直接在浏览器中运行脚本有很大的不同。虽然Javascript语言大体上是相同的(如果你运行的是Chrome浏览器,两者都是V8),但执行环境的其他部分(如可用的库)是不同的。
node.js是一个服务器端Javascript执行环境,它将V8 Javascript引擎与一系列服务器端库相结合。
require()
是node.js添加到该环境中的一个特性。因此,当您在终端中运行node时,您正在运行一个包含require()
的环境。require()
不是内置在浏览器中的功能。这是node.js的特定功能,而不是浏览器的特定功能。因此,当您尝试让浏览器运行脚本时,它没有require()
。有一些方法可以在浏览器中运行某些形式的node.js代码(但不是全部)。例如,您可以使用类似的浏览器替代
require()
(虽然不是完全相同)。但是,您不会在浏览器中运行Web服务器,因为这不是浏览器所能做到的。
您可能会对browserify感兴趣,它允许您使用
require()
语句在浏览器中使用节点样式的模块。0vvn1miw3#
正如Abel所说,Node〉= 14中的ES模块在默认情况下不再有
require
。如果您想添加它,请将以下代码放在文件的顶部:
来源:https://nodejs.org/api/modules.html#modules_module_createrequire_filename
k0pti3hp4#
Node.JS是一种服务器端技术,而不是浏览器技术。因此,特定于节点的调用,如
require()
,在浏览器中不起作用。如果希望从节点提供特定于浏览器的模块,请参阅browserify或webpack。
rur96b6h5#
只要从package.json中删除“type”:“module”就可以了。我希望这会对你有所帮助😊。
tpgth1q76#
点1:
Add require()
函数调用的代码行只能在app.js
文件或main.js
文件中。第2点:通过检查
pacakage.json
文件来确保所需的软件包已经安装。如果没有更新,运行“npm i”。4xrmg8kj7#
我的错误:我安装了ESLint到我的项目,并犯了一个错误,当我填写问卷,并选择了错误类型的模块)也许这将有助于某人))
您的项目使用什么类型的模块?· * commonjs
llew8vvj8#
我通过从package.json文件中删除下面一行来解决这个问题
希望它能解决问题。
7fhtutme9#
我通过以下步骤来解决这个问题:-
步骤1:在项目根目录下创建
addRequire.js
文件。步骤2:在
addRequire.js
中添加以下代码行步骤3:我在
app.js
文件头导入了文件现在您在整个项目中除了
import
之外还有require
,并且可以在任何地方使用这两个函数。