Express.js运行报错:express() not a function与ES模块引用问题
报错根因
两个报错均为模块规范不匹配导致,和Node版本没有关系:
- 第一个
require is not defined报错:项目根目录下的package.json中配置了"type": "module",Node会默认将所有.js后缀文件按照ES Module规范解析,CommonJS规范的require语法在该模式下无法使用。 - 第二个
express is not a function报错:import * as express from "express"的写法会将模块所有导出内容包裹为一个命名空间对象,express的可执行构造函数挂载在该对象的default属性上,直接调用express()会触发类型错误。
可选解决方案
两种方案二选一即可,不需要同时操作:
方案1:保留ES Module模式(和当前package.json配置匹配)
修改server.js的导入语法为ES Module默认导入,完整代码如下:
import express from "express"; const app = express(); // 可选:添加启动日志方便确认服务运行状态 app.listen(3000, () => { console.log("服务已启动,监听3000端口"); });
修改完成后直接在终端运行node server.js即可正常启动服务。
方案2:切回CommonJS模式
以下两种操作任选其一即可:
- 打开项目根目录的
package.json,删除"type": "module"配置项,保存后最初编写的require语法代码不需要改动,直接运行node server.js即可启动服务。 - 保留
package.json中的"type": "module"配置,将代码文件server.js重命名为server.cjs,Node会自动将.cjs后缀文件识别为CommonJS规范文件,原require写法的代码可直接正常运行。
内容的提问来源于stack exchange,提问作者Eniola
相关产品推荐
相关产品推荐

