没有定义 need

刚开始使用 Node.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服务我的页面。

503955 次浏览

在终端中,您正在运行节点应用程序,它正在运行您的脚本。与直接在浏览器中运行脚本相比,这是一个非常不同的执行环境。虽然 Javascript 语言在很大程度上是相同的(如果你运行的是 Chrome 浏览器,两个版本都是相同的) ,但是其他的执行环境,比如可用的库是不一样的。

Js 是一个服务器端 Javascript 执行环境,它结合了 V8 Javascript 引擎和一系列服务器端库。require()就是 node.js 添加到环境中的一个特性。因此,当您在终端中运行节点时,您正在运行一个包含 require()的环境。

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

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

但是,你不会在浏览器中运行网络服务器,因为浏览器没有这个能力。


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

Node.JS is a 服务器端 technology, not a browser technology. Thus, Node-specific calls, like require(), do not work in the browser.

如果希望从 Node 提供特定于浏览器的模块,请参见 浏览网络包

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

Point 2: Make sure the required package is installed by checking the pacakage.json file. If not updated, run "npm i".

在 Node.js 版本14中也可以这样做。

package.json中将包类型声明为模块时会发生这种情况。

To fix this, remove "type": "module" from your package.json and make sure you don't have any files ending with .mjs.

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

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

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

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

只要从 package.json 中删除“ type”: “ module”,我希望这将对您有所帮助。

My mistake: I installed ESLint to my project and made a mistake when I filled out the questionnaire and chose wrong type of modules) 也许对某些人会有帮助)

您的项目使用什么类型的模块

我通过以下步骤来解决这个问题:-

步骤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";

now you have require beside import across the whole project and you can use both anywhere.

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

 "type": "module"

希望它能解决这个问题。