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

如何配置TypeScript以支持CommonJS到ES模块的导入(node-fetch与Express)

在ES模块项目中同时使用ES模块与CommonJS模块的解决方案

完全可以在同一项目中同时使用ES模块(如node-fetch)和CommonJS模块(如Express),以下是几种可行的解决方法:

方法1:直接用import导入Express

Express作为CommonJS模块,在ES模块环境中可直接通过import语法导入,Node.js的ES模块加载器会自动处理兼容。将原有的require语句替换为:

import express from 'express';

你的tsconfig.json已开启esModuleInterop: true,该配置会让TypeScript正确处理CommonJS模块的默认导出,因此这种方式可以正常工作。

方法2:动态导入Express(兼容特殊场景)

如果直接import出现兼容性问题,可使用Node.js的动态import()函数(返回Promise),在异步逻辑中加载:

async function initServer() {
  const { default: express } = await import('express');
  const app = express();
  // 服务器初始化逻辑
}
initServer();

这种方式适合按需加载或处理复杂模块交互的场景。

方法3:将特定文件改为CommonJS后缀

若不想修改导入语法,可将使用require的文件后缀改为.cjs,Node.js会自动识别该后缀的文件为CommonJS模块,此时就能正常使用const express = require('express')。但这种方式会拆分模块类型,增加项目复杂度,仅推荐在特殊需求下使用。

关键配置验证

确保你的tsconfig.json中module设置为Node16或NodeNext(你的配置已满足),同时开启esModuleInterop: true,这两个配置是TypeScript正确处理Node.js混合模块场景的核心。另外,你的Node.js版本19.1.0已支持完整的ES模块与CommonJS交互能力,无需升级。

内容的提问来源于stack exchange,提问作者pcace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:05:23