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

使用franc与langs开发JS语言识别工具时遇ERR_REQUIRE_ESM错误

解决Error [ERR_REQUIRE_ESM]:franc和langs包的ESM兼容问题

问题原因

franc 6.x及以上版本为纯ESM模块,仅支持ES模块语法(import/export),若Node.js版本过低、package.json配置错误或存在CommonJS与ESM混合使用的场景,就会触发该错误。

可行解决方案

方案1:正确配置ESM环境(推荐)

  1. 匹配Node.js版本:使用Node.js 14.13.1+、16.x或更高版本(这类版本对ESM支持更稳定)。
  2. 验证package.json配置:确保"type": "module"处于package.json根节点,示例配置如下:
{
  "name": "language-detector",
  "version": "1.0.0",
  "type": "module",
  "dependencies": {
    "franc": "^6.2.0",
    "langs": "^2.0.0"
  }
}
  1. 安装最新依赖:
npm install franc@latest langs@latest
  1. 运行脚本:直接用node命令执行你的ES模块脚本:
node your-script-name.js

方案2:切换到CommonJS兼容版本(仅用于无法升级Node.js的场景)

若必须使用CommonJS语法(require),可降级franc到5.x版本(该版本支持CommonJS):

  1. 调整package.json:移除"type": "module"配置。
  2. 安装兼容依赖:
npm install franc@5 langs@latest
  1. 修改代码为CommonJS语法:
const franc = require('franc');
const langs = require('langs');

function guessLanguage(text) {
  const langCode = franc(text);
  if (langCode === 'und') {
    return 'Cannot guess language';
  } else {
    const language = langs.where('3', langCode);
    return language.name;
  }
}

// Example usage:
const inputText = 'Bonjour tout le monde';
const guessedLanguage = guessLanguage(inputText);
console.log(`The input text is in ${guessedLanguage}`);
  1. 运行脚本:
node your-script-name.js

额外排查点

  • 检查项目中是否存在同时使用require()和import的文件,这类混合写法会导致模块系统冲突。
  • 无需使用node --experimental-modules命令,该命令在Node.js 14+已废弃,仅保留type:module配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:17:42