为什么我不能在节点中使用'require'内置模块?

问题描述 投票:0回答:2

我正在尝试使用节点初始化一个非常简单的服务器。 据我了解,“require”和“HTTP”是我可以使用的内置模块。

所以我的代码如下所示:

const http = require('http');
const server = http.createServer(() => {
  console.log("I hear you!");
});
server.listen(3000);

当我运行

node server.js
时,我收到以下错误:

const http = require('http');
             ^
ReferenceError: require is not defined
    at file:///D:/Project/ZTM/recobrain-backend/server.js:1:14
    at ModuleJob.run (internal/modules/esm/module_job.js:152:23)
    at async Loader.import (internal/modules/esm/loader.js:166:24)
    at async Object.loadESM (internal/process/esm_loader.js:68:5)

我尝试在本地和全局安装“require”,结果相同。

最后,我设法让它与这段代码一起工作:

import * as http from 'http'; 

问题是,为什么 require 语法不起作用?

javascript node.js
2个回答
2
投票

Node 14 及之后的 ES 模块默认不再有 require 。

只需将此代码放在文件顶部即可:

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

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


1
投票

只需从

type: "module"
中删除
package.json
,您就应该能够使用
require()
,或者您也可以将其设置为
type: "commonjs"

© www.soinside.com 2019 - 2024. All rights reserved.