You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React CRA部署Heroku时如何白名单保留serve并减小slug体积

解决方案

以下是两种符合规范的实现方案,按推荐优先级排序:


方案一:使用Heroku静态buildpack(最优,彻底解决体积问题)

该方案完全不需要依赖serve包,无需保留任何node_modules内容,最终slug体积最小。
操作步骤:

  1. 移除不需要的post-build-clean buildpack(如有其他清理需求可保留):
    heroku buildpacks:remove https://github.com/opencounter/heroku-buildpack-post-build-clean.git
  2. 添加Heroku静态站点buildpack:
    heroku buildpacks:add https://github.com/heroku/heroku-buildpack-static.git
  3. 项目根目录新增static.json配置文件,等效于原serve -s build的服务能力:
{
  "root": "build/",
  "clean_urls": true,
  "routes": {
    "/**": "index.html"
  }
}
  1. 删除package.json中dependencies里的serve依赖,以及scripts中的start命令(静态buildpack会自动处理服务启动逻辑)
  2. 若保留post-build-clean buildpack,直接调整.slug-post-clean内容如下即可:
src
public
node_modules

该方案最终slug仅包含build目录的静态资源,体积通常控制在几十MB范围内。


方案二:保留serve依赖,通过匹配规则精准控制清理范围

你使用的post-build-clean buildpack支持类.gitignore的匹配规则,可通过!前缀定义白名单,无需手动逐个排除大包。
操作步骤:

  1. 本地执行npm ls serve查看当前版本serve的完整依赖树,确认所有运行必须的依赖包
  2. 修改.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:36:04