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

如何修复Phusion Passenger运行NodeJS项目时出现的ESM相关错误?

核心问题说明

你遇到的报错根源是旧版Phusion Passenger的Node.js加载器固定使用CommonJS的require()语法加载项目入口文件,而Node.js中require()不支持直接加载ESM规范的模块,哪怕配置了"type": "module"或者使用.mjs后缀也无法兼容。

可行解决方案(无需修改原有ESM业务代码)

方案1:新增CJS中转入口(最简便)

新增一个后缀为.cjs的CommonJS格式中转文件,通过动态导入语法加载你的原ESM入口文件:

  1. 在项目根目录新建passenger-loader.cjs,内容如下:
// passenger-loader.cjs
async function loadESMApp() {
  // 将./server.mjs替换为你原有的ESM启动文件路径
  await import('./server.mjs');
}
loadESMApp();
  1. 修改Passenger配置,指定启动文件为上述中转文件:
    在你的Web服务器(Nginx/Apache)的站点配置中添加如下配置:
# Nginx配置示例
passenger_startup_file passenger-loader.cjs;

如果是Apache配置,对应语法为:

PassengerStartupFile passenger-loader.cjs

方案2:打包ESM代码为CJS格式

使用打包工具将所有ESM业务代码打包为单个CommonJS格式的入口文件,无需调整原有代码逻辑,仅新增打包步骤即可:
使用esbuild的打包示例命令:

esbuild server.mjs --bundle --platform=node --outfile=app.cjs

打包完成后直接配置Passenger加载生成的app.cjs即可。

方案3:升级Phusion Passenger到6.0.20及以上版本

该版本开始Passenger的Node加载器已原生支持ESM入口文件,升级完成后无需额外配置即可直接加载你的原ESM启动文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:45:03