要求没有定义? Node.js的

时间:2015-08-11 01:08:59

标签: javascript node.js google-chrome

刚开始使用Node.js.在我的app/js文件中,我正在执行以下操作:

app.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来为我的页面提供服务。

8 个答案:

答案 0 :(得分:56)

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

如果您希望从Node提供特定于浏览器的模块,请参阅browserifywebpack

答案 1 :(得分:44)

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

当您在package.json中将包类型声明为模块时,就会发生这种情况。如果这样做,请certain CommonJS variables can't be used,包括require

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

答案 2 :(得分:36)

在终端中,您正在运行节点应用程序并且它正在运行您的脚本。这与在浏览器中直接运行脚本的执行环境截然不同。虽然Javascript语言基本相同(如果您正在运行Chrome浏览器,则为V8),其他执行环境(如可用库)也不尽相同。

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

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

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

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

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

答案 3 :(得分:16)

正如Abel所说,节点> = 14 中的ES模块默认不再具有require

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

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

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

答案 4 :(得分:0)

第1点:仅在app.js文件或main.js文件中添加require()函数调用代码行。

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

答案 5 :(得分:0)

使用:

php artisan make:auth

在代码顶部。

答案 6 :(得分:0)

只需从 package.json 中删除 "type":"module"。希望对你有帮助?。

答案 7 :(得分:-3)

要补充上面其他所有人所说的话,当您在HTML文件中有指向js文件的路径时,就会在客户端读取js文件。至少那是我的问题。我在index.html的标签中将它作为脚本保存了下来!希望能帮上忙!