部署Node.js应用至Heroku后无法启动,提示找不到serve-index模块
serve-index模块的问题 别着急,这种问题我碰到过好几次,大概率是依赖管理或者部署流程的小疏漏,咱们一步步排查:
先检查你的
package.json依赖配置
很多人会不小心把serve-index装到devDependencies里(用了npm install serve-index --save-dev),但Heroku在生产环境默认只会安装dependencies里的包。你打开package.json看看,把serve-index移到dependencies区块里,或者重新执行:npm install serve-index --save这样它就会被加到生产依赖里了。
确保
package.json和package-lock.json都提交到Git了
如果你修改了package.json但没提交,Heroku拉取的还是旧版本的代码,自然不会安装新的依赖。执行下面的命令把修改推送到Heroku:git add package.json package-lock.json git commit -m "Add serve-index to production dependencies" git push heroku main别在Heroku控制台手动执行
npm install
Heroku的dyno是临时容器,手动安装的依赖会在dyno重启后消失。正确的做法是让Heroku在构建阶段自动安装依赖,也就是上面提到的,把依赖加到package.json然后推送代码,Heroku会自动处理。查看Heroku的构建日志排查问题
如果上面的步骤都做了还是不行,用这个命令看实时日志:heroku logs --tail看看构建阶段有没有出现安装
serve-index的记录,或者有没有npm安装失败的报错(比如网络问题、版本冲突),这些日志能帮你定位具体问题。用Heroku的默认启动命令,别手动跑
node app.js
建议在package.json的scripts里配置start命令,比如:"scripts": { "start": "node app.js" }然后用
heroku restart重启dyno,让Heroku用这个命令启动应用,这样环境变量和依赖路径都是正确的,比手动执行更可靠。
内容的提问来源于stack exchange,提问作者Hoàng Trần

