You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:51:34