刚开始使用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
来为我的页面提供服务。
答案 0 :(得分:56)
Node.JS是服务器端技术,而不是浏览器技术。因此,特定于节点的调用(如require()
)在浏览器中不起作用。
如果您希望从Node提供特定于浏览器的模块,请参阅browserify或webpack。
答案 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的标签中将它作为脚本保存了下来!希望能帮上忙!