运行server.js报ReferenceError: require is not defined错误是什么原因
报错触发原因及解决方案
核心原因
该报错的根本原因是当前 Node.js 项目启用了 ES 模块规范,但代码中使用了 CommonJS 规范的 require 语法加载依赖,两种模块规范不兼容。
最常见的触发场景是你的 package.json 文件中配置了 "type": "module" 字段,Node.js 13 及以上版本中,添加该配置后所有 .js 后缀文件都会被默认识别为 ES 模块,原生不支持 require 调用。
可选解决方案
你可以根据开发需求选择任意一种适配方案:
- 方案1:保留 CommonJS 规范
直接删除package.json中的"type": "module"配置即可,Node.js 会默认将.js文件识别为 CommonJS 模块,原生支持require语法。 - 方案2:全量切换为 ES 模块规范
将代码中所有require语法替换为 ES 模块的import语法,修改后的server.js对应代码如下:
补充说明:如果后续需要导入import express from "express"; import cors from 'cors'; const app = express(); import dotenv from 'dotenv' import passport from "passport"; import userRoutes from './routes/userRoutes.cjs' dotenv.config().json格式文件,ES 模块规范下需要添加导入断言:import xxx from './xxx.json' assert {type: 'json'} - 方案3:混合使用两种规范(非必要不推荐)
如果确实需要在 ES 模块环境中使用require加载依赖,可以手动创建require方法:import { createRequire } from 'module'; const require = createRequire(import.meta.url); // 后续即可正常使用 require 语法加载各类依赖
内容的提问来源于stack exchange,提问作者Pavel Sarygin
相关产品推荐
相关产品推荐

