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

Node.js中配置"type":"module"报错问题求助

cPanel部署ESM格式Express应用报错ERR_REQUIRE_ESM的原因及解决办法

核心原因分析

1. cPanel的Node.js版本不达标

Node.js对原生ESM的完整支持从14.13.0/16.0.0版本开始,若cPanel上的Node.js版本低于这个范围,即使package.json配置了"type":"module",环境也无法正确识别ESM语法,从而触发ERR_REQUIRE_ESM错误。而你的本地环境用的是符合要求的新版本,所以运行正常。

2. cPanel的应用启动逻辑未适配ESM

部分cPanel的Node.js部署工具(如Setup Node.js App)默认采用CommonJS的启动流程,即便你配置了ESM,它仍可能尝试用require加载入口文件,导致语法冲突。

3. 第三方依赖兼容性问题

部分依赖包尚未完全适配ESM,内部仍使用require语法或CommonJS导出方式,在ESM模式下运行时会触发兼容性错误。本地环境可能因依赖版本、缓存等因素未暴露该问题,但部署到cPanel后会显现。

解决办法

  • 升级cPanel的Node.js版本
    登录cPanel的Node.js管理界面,切换至14.13.0及以上版本(推荐16.x或更高)。切换后需删除node_modules和package-lock.json,重新执行npm install确保依赖适配新环境。

  • 调整cPanel启动配置
    在cPanel的Node.js应用设置中,确认入口文件路径和名称正确,并且启动命令为node [你的入口文件名](例如node app.js),避免面板自动添加的额外参数干扰ESM识别。

  • 排查并替换不兼容依赖
    执行npm ls查看依赖树,找出标注为CommonJS-only的包,要么替换为ESM兼容的替代包,要么升级该包至支持ESM的版本。若暂时无法替换,可临时使用esm模块兼容,但长期建议采用原生ESM兼容的依赖。

  • 规范ESM代码写法
    避免混用require和import语法;导入本地文件时必须添加完整后缀(例如import './routes.js'不能省略.js),这是ESM的强制要求,部分本地环境可能因实验性配置允许省略,但cPanel环境会严格执行。

内容的提问来源于stack exchange,提问作者Igor David Makyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:14:52