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

Node.js 16中使用translate模块时import语句报错的解决方案咨询

解决CommonJS项目中使用ES模块translate的问题

问题背景

当前使用Node.js 16,项目整体基于CommonJS规范(用require导入模块),但要使用的translate是纯ES模块,只能用import导入。尝试直接用import会报错Cannot use import statement outside a module;添加"type": "module"到package.json后,原有require代码又报错require is not defined in ES module scope;用.mjs文件封装后,CommonJS文件用require导入该.mjs文件时,报错Error [ERR_REQUIRE_ESM]: require() of ES Module ... not supported。

可行解决方案

方案1:在CommonJS中直接使用动态import()

CommonJS模块支持动态import()语法,可异步加载ES模块。修改你的translaction.js:

const translateService = async (text, targetLang = 'es') => {
  // 动态加载translate模块
  const { default: translate } = await import('translate');
  return translate(text, targetLang);
};

module.exports = {
  translateService,
};

调用该服务时需用异步方式:

const { translateService } = require('./translaction.js');

async function run() {
  const result = await translateService('Hello world');
  console.log(result);
}
run();

方案2:用.mjs封装模块后动态导入

先修改translate.mjs为标准ES模块导出:

import translate from 'translate';

export const translateDatas = async (text, targetLang = 'es') => {
  return await translate(text, targetLang);
};

再在CommonJS的translaction.js中通过动态import加载:

let translateDatas;

// 提前预加载模块,避免每次调用重复加载
(async () => {
  const module = await import('../utils/translate.mjs');
  translateDatas = module.translateDatas;
})();

const translateService = async (text) => {
  // 若预加载未完成,实时加载模块
  if (!translateDatas) {
    const module = await import('../utils/translate.mjs');
    translateDatas = module.translateDatas;
  }
  return translateDatas(text);
};

module.exports = {
  translateService,
};

方案3:逐步迁移到ES模块(长期优化方案)

如果项目有长期维护计划,可逐步将CommonJS代码转为ES模块:

  1. 保留package.json中的"type": "module"配置
  2. 将所有require()替换为import语句,module.exports替换为export语法
  3. Node.js 16对ES模块支持完善,项目依赖(如mongoose)均支持import导入

注意事项

  • 动态import()返回Promise,相关逻辑必须用async/await处理
  • 确保translate模块的配置(如API密钥)正确,可参考模块文档完成设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:33:23