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

无法将NestJS应用部署至Heroku的问题排查

NestJS部署Heroku报错:Cannot find module '/app/dist/main'

问题描述

部署NestJS应用到Heroku时,日志出现以下错误:

2022-09-03T16:19:06.793730+00:00 app[web.1]: > pokedex@0.0.1 start:prod
2022-09-03T16:19:06.793731+00:00 app[web.1]: > node dist/main
2022-09-03T16:19:06.793731+00:00 app[web.1]: 
2022-09-03T16:19:06.859243+00:00 app[web.1]: node:internal/modules/cjs/loader:959
2022-09-03T16:19:06.859244+00:00 app[web.1]:   throw err;
2022-09-03T16:19:06.859245+00:00 app[web.1]:   ^
2022-09-03T16:19:06.859245+00:00 app[web.1]: 
2022-09-03T16:19:06.859245+00:00 app[web.1]: Error: Cannot find module '/app/dist/main'
2022-09-03T16:19:06.859246+00:00 app[web.1]:     at Function.Module._resolveFilename (node:internal/modules/cjs/loader:956:15)
2022-09-03T16:19:06.859247+00:00 app[web.1]:     at Function.Module._load (node:internal/modules/cjs/loader:804:27)
2022-09-03T16:19:06.859247+00:00 app[web.1]:     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
2022-09-03T16:19:06.859247+00:00 app[web.1]:     at node:internal/main/run_main_module:17:47 {
2022-09-03T16:19:06.859248+00:00 app[web.1]:   code: 'MODULE_NOT_FOUND',
2022-09-03T16:19:06.859248+00:00 app[web.1]:   requireStack: []
2022-09-03T16:19:06.859249+00:00 app[web.1]: }

已尝试操作:

  • 创建包含npm run start:prod命令的Procfile
  • 将@nestjs/cli从devDependencies移至dependencies
    问题仍未解决。

解决方案

1. 确保package.json包含正确的构建脚本

Heroku默认会在部署时执行npm run build,如果package.json里没有定义该脚本,就无法生成dist目录。检查并配置:

"scripts": {
  "build": "nest build",
  "start:prod": "node dist/main"
}

2. 检查.gitignore是否排除dist目录

如果本地.gitignore包含dist/,该目录不会被推送到Heroku。推荐保留.gitignore中的dist/,通过Heroku自动构建生成目录,而非提交dist到仓库。

3. 配置Heroku构建钩子

如果Heroku未自动执行构建,添加heroku-postbuild脚本触发构建:

"scripts": {
  "heroku-postbuild": "npm run build"
}

4. 确保端口适配Heroku环境

NestJS需监听Heroku提供的PORT环境变量,修改main.ts:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT || 3000);
}
bootstrap();

5. 处理构建依赖

Heroku生产环境默认跳过devDependencies安装,若构建需要dev依赖,可配置预构建脚本安装dev依赖,构建完成后清理:

"scripts": {
  "heroku-prebuild": "npm install --only=dev",
  "heroku-postbuild": "npm run build && npm prune --production"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:03:33