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

在cPanel部署Node.js API时遭遇503及ERR_REQUIRE_ESM错误求助

解决Node.js + MySQL部署cPanel出现503及ERR_REQUIRE_ESM错误

错误根源

你的项目package.json中设置了"type": "module",将项目声明为ES模块(ESM),但cPanel搭载的LiteSpeed节点服务器(lsnode.js)是通过CommonJS规范的require()加载你的入口文件index.js,而require()不支持直接加载ESM模块,这就是触发ERR_REQUIRE_ESM错误、进而导致503服务不可用的核心原因。

解决方案

方案一:切换回CommonJS模块(推荐,无需服务器权限)

  1. 编辑项目根目录的package.json,移除"type": "module"字段
  2. 将代码中的ESM语法替换为CommonJS语法:
    • 把import xxx from 'xxx'改为const xxx = require('xxx')
    • 把export default xxx改为module.exports = xxx(或对应导出语法)
  3. 回到cPanel的Node.js管理界面,停止当前进程,执行npm install,再重启进程

方案二:修改LiteSpeed的lsnode.js(需服务器文件权限)

如果你的服务器允许修改系统文件,可以调整lsnode.js的加载逻辑适配ESM:

  1. 找到文件/usr/local/lsws/fcgi-bin/lsnode.js的第48行
  2. 替换原有的require()加载代码为动态import():
    import(startupFile).then((module) => {
      var app = module.default || module;
      // 保留后续原本使用app的代码逻辑
    }).catch((err) => {
      console.error('加载应用失败:', err);
      process.exit(1);
    });
    
  3. 重启LiteSpeed服务或Node.js进程

额外说明

  • 服务器与本地Node.js版本(v18.9.1 vs v18.14.1)差异极小,不是引发问题的原因
  • 之前安装node-fetch@2.6.1的操作和当前错误无关,若切换回CommonJS后需使用fetch功能,可保留该依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:07:36