Node.js同一文件混用import与require遇报错,求解决方案
解决ES模块中
require未定义的问题 核心问题分析
你在package.json中设置了"type": "module",此时所有.js文件会被Node.js识别为ES模块,原生require语法不再可用。虽然你尝试通过createRequire创建require函数,但可能因语法细节或混用逻辑导致报错。
解决方案1:统一使用ES模块import语法
既然已经启用ES模块,直接用import替代所有require是最规范的方案——express、config、axios均支持ES模块导入:
import normalizeUrl from 'normalize-url'; import express from 'express'; const router = express.Router(); import config from 'config'; import axios from 'axios';
解决方案2:正确使用createRequire(不推荐混用)
如果必须保留部分require调用,需确保createRequire的代码格式正确,避免语法压缩导致的执行问题:
import { createRequire } from 'module'; // 将require定义单独成行,避免语法解析异常 const require = createRequire(import.meta.url); import normalizeUrl from 'normalize-url'; const express = require('express'); const router = express.Router(); const config = require('config'); const axios = require('axios');
注意:混用
import和require会降低代码可维护性,非必要场景不建议这么做。
额外检查项
- 确认Node.js版本支持ES模块(推荐v14.13.0+或v12.20.0+)
- 检查
package.json中"type": "module"的拼写和位置是否正确
内容的提问来源于stack exchange,提问作者Hasan Mahmoud
相关产品推荐
相关产品推荐

