Heroku部署Node.js应用启动报错Cannot find module 'pvutils' 本地运行正常
问题原因
- 核心是你使用的
verificac19-sdk@0.4.2版本存在依赖声明漏洞:该版本没有把pvutils纳入自身的生产依赖列表,Heroku默认只会安装顶层package.json声明的生产依赖以及各依赖显式声明的生产依赖,因此部署时不会自动拉取pvutils包,启动时就会报找不到模块的错误。 - 本地运行正常是因为你的本地开发环境中已经存在
pvutils包:可能是被其他项目的依赖提升安装到了全局或公共node_modules目录,也可能是你之前本地执行完整npm install时连带安装了该包的开发版本,因此本地加载不会报错。
解决方案
- 方案一(最推荐,见效最快):直接将
pvutils显式添加到你项目的生产依赖中。在本地项目根目录执行命令npm install pvutils,执行完成后将更新后的package.json和package-lock.json提交到代码仓库,重新部署到Heroku即可正常启动。 - 方案二:升级
verificac19-sdk到更高的正式版本。该依赖的后续版本已经官方修复了依赖漏声明的问题,你可以将package.json中verificac19-sdk的版本号替换为最新稳定版,重新安装依赖后提交部署即可。 - 方案三(不建议长期使用):修改Heroku的构建配置,允许安装全部开发依赖。该操作会把devDependencies下的所有包都安装到生产环境,会增大构建体积、引入不必要的安全风险,仅适合临时测试使用。
内容的提问来源于stack exchange,提问作者A. Rizzi
相关产品推荐
相关产品推荐

