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

如何配置Node.js将依赖中的.js文件识别为ESM模块

强制指定无ESM标识依赖为ESModule的配置方法

Node.js默认模块判定规则为:第三方依赖包的package.json未配置"type": "module"、也未通过exports字段声明模块类型时,包内.js后缀文件默认按CommonJS规范解析,可通过以下三种方案实现强制按ESM处理,按生产环境推荐优先级排序:

方案1:本地补丁修改依赖package.json(最稳定,无Node版本兼容问题)

该方案不需要修改Node启动参数,适配所有支持ESM的Node版本:

  • 安装补丁工具:执行npm i -D patch-package
  • 进入node_modules下对应问题依赖的根目录,打开其package.json,新增配置项:"type": "module"
  • 执行命令生成本地补丁:npx patch-package 问题依赖的包名
  • 在自身项目package.json的scripts配置中新增钩子:"postinstall": "patch-package",后续每次执行npm install都会自动给依赖打上该补丁,不会因为重装依赖失效。

方案2:自定义Node模块解析Loader(适合不想修改依赖文件的场景)

Node 16及以上版本稳定支持自定义Loader钩子,可以在解析阶段直接指定对应文件的模块格式:

  • 新建自定义Loader文件force-esm-loader.mjs,写入以下逻辑:
export async function resolve(specifier, context, nextResolve) {
  const resolved = await nextResolve(specifier, context);
  // 按路径匹配需要强制按ESM处理的依赖,多个依赖可自行扩展判断条件
  if (resolved.url.includes('/node_modules/问题依赖包名/') && resolved.url.endsWith('.js')) {
    resolved.format = 'module';
  }
  return resolved;
}
  • 启动项目时追加Loader参数:node --loader ./force-esm-loader.mjs 项目入口文件.js

方案3:开启Node内置ESM自动检测(适合Node 20.10+的非核心生产场景)

Node 20.10及以上版本提供实验性启动参数--experimental-detect-module,开启后Node会自动扫描.js文件内容:如果文件内仅使用import/export等ESM语法、未出现require/module.exports等CommonJS语法,会自动按ESM模块解析,不需要额外修改配置。
启动示例:
node --experimental-detect-module 项目入口文件.js
注意:该参数为实验特性,不建议在对稳定性要求极高的生产环境使用。

注意:仅在自身项目根目录的package.json中配置"type": "module"无法解决该问题,该配置仅对当前项目自身的.js文件生效,不会覆盖node_modules下第三方依赖的模块判定规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:57:13