我正在尝试使用节点初始化一个非常简单的服务器。 据我了解,“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 语法不起作用?
Node 14 及之后的 ES 模块默认不再有 require 。
只需将此代码放在文件顶部即可:
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
来源:https://nodejs.org/api/modules.html#modules_module_createrequire_filename
只需从
type: "module"
中删除 package.json
,您就应该能够使用 require()
,或者您也可以将其设置为 type: "commonjs"