部署Node.js应用到Heroku时构建失败,删除依赖文件仍报错
Heroku Node.js应用构建失败解决方案
核心报错原因:子项目构建时找不到react-scripts命令
根因分析
你当前使用的是monorepo项目结构,根目录存放后端代码,airbnb子目录存放前端React代码。Heroku构建时默认只会执行根目录的npm install安装根目录依赖,不会自动安装airbnb子目录的依赖,因此子目录下的react-scripts包不存在,导致构建失败。另外如果react-scripts被放在devDependencies字段中,Heroku生产环境默认也不会安装这类开发依赖。
可用解决方案
- 修改根目录构建命令,在执行子目录构建前先安装子目录依赖。将根目录package.json中的build脚本调整为:
"build": "concurrently \"cd airbnb/ && npm install && npm run build\"" - 若不想每次构建都重复安装子目录依赖,也可以把airbnb子目录package.json中的所有生产依赖同步写到根目录的dependencies字段中,确保react-scripts等包在根目录安装后可以被子项目调用。
- 如果你不需要同时部署前后端代码,也可以直接将airbnb子目录作为项目根目录部署,调整项目推送结构即可。
注意事项
所有生产构建需要用到的包都必须放在package.json的dependencies字段下,不要放在devDependencies中。如果确实需要安装devDependencies的内容,可以在Heroku控制台的环境变量配置中添加
NPM_CONFIG_PRODUCTION=false。
内容的提问来源于stack exchange,提问作者thesmilingsabre
相关产品推荐
相关产品推荐

