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

CommonJS模式TypeScript项目导入type:module类型ESM包问题求助

解决方案

方案1:将自身项目切换为ESM模块格式(推荐)

这是最彻底的适配方案,不会产生额外的异步逻辑开销:

  • 在你自己项目的package.json中新增配置:"type": "module"
  • 修改tsconfig.json的对应配置:
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true
  }
}
  • 之后直接使用标准ES导入语法即可:
import stringifyObject from 'stringify-object';

方案2:保持自身项目为CommonJS格式,使用异步动态导入

如果不想改动现有项目的模块体系,可使用Node支持的动态import()语法加载ESM包,注意该方法是异步的:

// 异步函数内使用
async function demo() {
  // ESM包的默认导出挂载在返回值的default属性上
  const { default: stringifyObject } = await import('stringify-object');
  // 正常使用包的能力
  console.log(stringifyObject({ foo: 'bar' }));
}

// 也可使用Promise.then写法
import('stringify-object').then(({ default: stringifyObject }) => {
  // 业务逻辑
});

错误原因说明

你之前修改TS配置、使用import ... = require()语法均无效的核心原因是:该错误是Node.js原生模块机制的硬性限制,CommonJS模块中不允许同步require ESM格式的模块,和TypeScript的编译配置无关。修改node_modules内第三方包的配置会引发依赖连锁问题,完全不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:36:04