React CRA部署Heroku时如何白名单保留serve并减小slug体积
解决方案
以下是两种符合规范的实现方案,按推荐优先级排序:
方案一:使用Heroku静态buildpack(最优,彻底解决体积问题)
该方案完全不需要依赖serve包,无需保留任何node_modules内容,最终slug体积最小。
操作步骤:
- 移除不需要的post-build-clean buildpack(如有其他清理需求可保留):
heroku buildpacks:remove https://github.com/opencounter/heroku-buildpack-post-build-clean.git - 添加Heroku静态站点buildpack:
heroku buildpacks:add https://github.com/heroku/heroku-buildpack-static.git - 项目根目录新增
static.json配置文件,等效于原serve -s build的服务能力:
{ "root": "build/", "clean_urls": true, "routes": { "/**": "index.html" } }
- 删除
package.json中dependencies里的serve依赖,以及scripts中的start命令(静态buildpack会自动处理服务启动逻辑) - 若保留post-build-clean buildpack,直接调整
.slug-post-clean内容如下即可:
src public node_modules
该方案最终slug仅包含build目录的静态资源,体积通常控制在几十MB范围内。
方案二:保留serve依赖,通过匹配规则精准控制清理范围
你使用的post-build-clean buildpack支持类.gitignore的匹配规则,可通过!前缀定义白名单,无需手动逐个排除大包。
操作步骤:
- 本地执行
npm ls serve查看当前版本serve的完整依赖树,确认所有运行必须的依赖包 - 修改
.slug-post-clean文件内容如下:
# 清理源码和公共资源目录 src public # 先排除node_modules下所有内容 node_modules/* # 白名单保留serve及其依赖,按需补充你查到的依赖即可 !node_modules/serve !node_modules/ansi-align !node_modules/ansi-regex !node_modules/boxen !node_modules/chalk !node_modules/commander !node_modules/debug !node_modules/glob !node_modules/mime-types !node_modules/send !node_modules/supports-color !node_modules/type-is !node_modules/vary
该方案可将slug体积控制在100MB以内,符合Heroku软限制要求。
内容的提问来源于stack exchange,提问作者Firmin Martin
相关产品推荐
相关产品推荐

