部署Node.js+React应用至Heroku时出现Cannot find module 'cors'错误
解决Heroku部署Node.js+React应用时的cors模块缺失问题
问题原因
Heroku默认仅在项目根目录执行npm install,不会自动遍历子目录安装依赖。你的后端依赖(包括cors)都在server/package.json里,但Heroku没去这个目录安装,导致启动时找不到模块,触发H10崩溃错误。
解决方案
1. 调整根目录package.json的postinstall脚本
修改根目录的package.json,让Heroku在安装完根目录依赖后,自动安装server目录的依赖,同时保留React的build步骤:
{ "scripts": { // 保留原有React相关脚本(如start、build等) "postinstall": "npm install --prefix server && npm run build" } }
npm install --prefix server:指定在server目录执行依赖安装npm run build:编译React前端生成build目录,用于后端静态文件托管(如果你的后端配置了托管前端的话)
2. 确保server目录的依赖配置正确
检查server/package.json,确认cors是放在dependencies而非devDependencies中:
{ "dependencies": { "cors": "^2.8.5", // 其他后端依赖... } }
Heroku默认会跳过devDependencies的安装,所以必须把生产环境需要的依赖放在dependencies里。
3. 修正Procfile(可选)
如果之前的Procfile是web: node server/index.js,现在可以直接保留——因为server目录的依赖已经通过postinstall安装完成,从根目录启动后端即可。
4. 本地验证与部署前准备
- 本地测试:删除根目录和server目录的
node_modules,执行npm install,确认所有依赖安装完成后,启动项目测试是否正常运行。 - Git提交:确保
server/package.json、server/package-lock.json以及修改后的根目录package.json都已提交到Git仓库,不要把这些文件加入.gitignore。
部署验证
重新推送到Heroku,查看日志确认状态:
heroku logs --tail
如果没有Cannot find module 'cors'的错误,且应用启动成功,就说明问题解决了。
内容的提问来源于stack exchange,提问作者test-app
相关产品推荐
相关产品推荐

