如何定位修复Error [ERR_REQUIRE_ESM]?NUXT3部署问题求助
解决CPanel部署Nuxt3时的ERR_REQUIRE_ESM错误
这个错误是因为Phusion Passenger默认用CommonJS模式加载启动文件,但Nuxt3构建后的server/index.mjs是ES模块,直接用require()加载会触发兼容问题,给你三个可行的解决办法:
方法一:写一个CommonJS启动包装文件
- 在主机的
compta-node目录下新建start.cjs文件,内容如下:
async function start() { await import('./server/index.mjs'); } start().catch(err => { console.error('启动失败:', err); process.exit(1); });
- 打开CPanel的Setup Node.js App配置页,把启动文件改成
start.cjs,保存后重启应用。
方法二:修改Nuxt配置构建兼容代码
- 本地项目的
nuxt.config.ts里添加以下配置,让Nitro输出CommonJS格式的服务器代码:
export default defineNuxtConfig({ nitro: { node: { format: 'cjs' } } });
- 重新执行
npm run build,把新生成的.output目录内容全量覆盖上传到主机的compta-node,再重启应用。
方法三:开启Passenger的ES模块支持
- 在主机的
compta-node目录下新建或修改package.json,添加一行:
{ "type": "module" }
- 保存后重启应用,Passenger会以ES模块模式加载
server/index.mjs(注意:需要主机的Passenger版本≥6.0才能支持)
内容的提问来源于stack exchange,提问作者Meaulnes
相关产品推荐
相关产品推荐

