Node.js(cPanel部署)出现ERR_REQUIRE_ESM错误求助
解决方案:cPanel部署ESM Node.js应用遇ERR_REQUIRE_ESM错误
你判断的问题核心没错——Passenger的node-loader确实在用CommonJS的require()加载你的ESM入口文件。以下是几个无需大规模修改代码的有效解决办法:
方法1:通过package.json配置+自定义启动命令适配ESM
- 确保
package.json中已添加ESM标识:"type": "module" - 在cPanel的Node.js应用管理界面,将启动文件改为自定义命令:
node app.js,而非直接填写app.js。这样Passenger会直接调用Node命令启动应用,Node会根据package.json的配置自动识别ESM模块。
方法2:用CommonJS入口文件做过渡桥梁
创建一个名为entry.cjs的文件(.cjs后缀明确告知Node这是CommonJS模块),内容如下:
// 动态加载ESM入口文件 import('./app.js').catch(err => { console.error('应用启动失败:', err); process.exit(1); });
随后在cPanel中将启动文件设置为entry.cjs。Passenger用require()加载这个CommonJS文件后,会通过动态import加载你的ESM应用,完全无需修改原有代码。
方法3:更新服务器Passenger版本
低于6.0.12版本的Passenger对ESM支持不完善,可联系主机服务商将Passenger更新至最新稳定版。更新完成后,Passenger会自动识别package.json中的"type": "module"配置,正确加载ESM模块。
内容的提问来源于stack exchange,提问作者Vedran
相关产品推荐
相关产品推荐

