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

如何告知Node.js当前运行的脚本不是ES Module模块

Node.js 脚本非ESM模块声明方案

问题根因

你遇到的Error [ERR_REQUIRE_ESM]: Must use import to load ES Module错误通常来自两种场景:

  1. 你当前运行的.js脚本被Node.js误判定为ESM模块,但脚本中使用了CommonJS的require语法
  2. 你在CommonJS脚本中使用require加载了仅支持ESM格式的第三方依赖
    针对你描述的「node_modules存在模块文件就导致自身脚本被误判」的场景,可通过以下方案强制指定脚本为CommonJS类型:

具体解决方法

  • 方案1:修改脚本后缀
    直接将你要运行的脚本后缀从.js改为.cjs,Node.js对所有.cjs文件会固定识别为CommonJS格式,不受任何目录下其他ESM配置的影响。
  • 方案2:项目根目录配置package.json
    在你脚本所在的项目根目录新建/修改package.json,添加如下字段:
    {
      "type": "commonjs"
    }
    
    该配置会声明当前目录下所有.js文件默认是CommonJS模块,Node.js会优先读取当前项目的package.json配置,不会将node_modules内的配置作用于上层业务脚本。
  • 方案3:运行时显式指定类型
    执行脚本时添加参数强制指定输入类型,命令如下:
    node --input-type=commonjs 你的脚本文件名.js

特殊情况处理

如果是你依赖的第三方包本身是ESM格式,上述方法无法解决报错,可二选一处理:

  1. 将你的项目切换为ESM模式:把package.json中的type字段改为module,项目内所有require语法替换为import语法
  2. 在CommonJS脚本中使用动态导入语法加载ESM包:const 包名 = await import('ESM包名')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:06:03