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

如何将require('random')改为动态import以解决ERR_REQUIRE_ESM错误?

解决ES模块require报错并保持原有调用方式

你遇到的问题是因为random包现在是ES模块(ESM),而你的代码是CommonJS格式,Node.js禁止用require()直接导入ESM模块,必须改用动态import()。下面提供两种修改方式,都能保持你原来random(0,20)的调用习惯:

方式一:用async/await(推荐,代码更直观)

把业务代码包裹在异步函数里,通过await完成动态导入,再把模块里的对应方法封装成你习惯的调用形式:

async function run() {
  // 动态导入random模块,解构获取默认导出
  const { default: randomLib } = await import('random');
  // 封装成你习惯的调用方式(生成整数用int,浮点数用float,按需调整)
  const random = (min, max) => randomLib.int(min, max);

  // 现在可以像之前一样调用
  const x = random(0, 20);
  console.log(x);
  // 其他依赖random的业务代码都放在这里
}

// 执行异步函数并捕获错误
run().catch(err => console.error('出错了:', err));

方式二:用Promise的then方法

如果不想用async函数,也可以通过Promise链式调用处理导入:

import('random')
  .then(({ default: randomLib }) => {
    const random = (min, max) => randomLib.int(min, max);
    const x = random(0, 20);
    console.log(x);
    // 其他依赖random的业务代码放在这里
  })
  .catch(err => console.error('出错了:', err));

注意点

  • 如果你原来的random(0,20)是生成浮点数,把randomLib.int改成randomLib.float即可;
  • 动态导入是异步操作,所有依赖random的代码必须放在异步上下文里(async函数内部或then回调中),不能在全局同步调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:02:21