部署Node.js应用至Heroku遇H10错误:nodemon未找到
问题分析与解决步骤
从错误日志可明确核心问题:nodemon: not found。原因是Heroku生产环境默认不安装devDependencies中的依赖,你把nodemon放在了devDependencies里,同时package.json的start脚本指定用nodemon启动服务,导致部署后找不到该命令,进而引发H10崩溃错误。
另外,虽然你配置了Procfile,但Heroku会优先使用package.json中定义的start脚本,所以Procfile的配置未生效。
修复方案
方案一:修改package.json的启动脚本(推荐)
将scripts中的start命令从nodemon index.js改为直接用node启动,同时可新增dev脚本用于本地开发:
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", "dev": "nodemon index.js" }
本地开发时用npm run dev启动nodemon实现热重载,生产环境Heroku用npm start直接启动node服务,无需安装开发依赖。
方案二:将nodemon移至dependencies(不推荐)
若一定要在生产环境用nodemon,把它从devDependencies移到dependencies中:
"dependencies": { // ... 其他原有依赖 "nodemon": "^2.0.19" }, "devDependencies": { // 移除nodemon }
但生产环境不需要nodemon的热重载功能,这种做法会增加部署体积,无实际必要。
方案三:确保Procfile生效
若想让Heroku使用Procfile的命令,可删除package.json中的start脚本,或者修改Procfile为:
web:npm start
但该方案不如方案一清晰直观。
验证修复
修改完成后重新提交代码到Heroku:
git add . git commit -m "fix: update start script to use node instead of nodemon" git push heroku main
部署完成后访问应用,H10错误即可解决。
内容的提问来源于stack exchange,提问作者Will Dersh
相关产品推荐
相关产品推荐

