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

如何在未配置type:module的Node项目中引入ES模块包?

解决方案

你遇到的是CommonJS规范项目加载纯ES模块(ESM)包的典型冲突问题,不需要将整个项目改为ES模块规范,可使用以下任意一种方案解决:

方法1:使用动态import()(推荐,无额外依赖)

CommonJS 原生支持异步的import()语法加载ES模块,示例代码如下:

// async/await 写法
async function main() {
  // 加载ES模块,取出默认导出
  const gifsicle = (await import('gifsicle')).default;
  // 此处编写使用gifsicle的业务逻辑
}
main();

// Promise链式调用写法
import('gifsicle')
  .then(mod => {
    const gifsicle = mod.default;
    // 此处编写使用gifsicle的业务逻辑
  })
  .catch(err => console.error('加载gifsicle失败:', err));

如果该包为命名导出,直接取mod.对应导出名即可,无需加.default

方法2:安装兼容CommonJS的历史版本

如果不想改动现有同步逻辑,可安装gifsicle最后一个支持CommonJS规范的版本:

# 可先查询包的发版日志,找到转ESM之前的版本号替换下方的版本占位符
npm install gifsicle@<兼容版本号>

安装后即可直接用const gifsicle = require('gifsicle');加载。

方法3:使用esm加载器兼容

如果需要批量加载多个ES模块包,可使用esm加载器实现CommonJS项目直接require ES模块:

  1. 安装依赖:
npm install esm
  1. 启动项目时添加加载器参数:
node -r esm 你的入口文件名.js
  1. 代码中无需修改,可直接使用const gifsicle = require('gifsicle');加载。

报错原因说明

  • 首次require报错:你引入的gifsicle为纯ES模块包,不支持CommonJS的require语法加载
  • 直接用import报错:项目默认是CommonJS规范,不支持顶层使用import语句,只有ES模块项目支持该写法
  • 添加"type": "module"后报错:该配置会将整个项目识别为ES模块,所有原有require语法都会失效,仅适合全项目已完成ES模块迁移的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:54:04