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

无法部署应用至Heroku:node_modules体积过大解决方案咨询

解决Create-React-App在Heroku部署时体积超限的问题

嘿,我刚碰到过几乎一模一样的问题,折腾了好一阵终于搞定了,给你分享几个亲测有效的办法:

核心思路

Heroku的500MB限制是针对slug大小的(也就是最终部署到服务器上的文件包),所以我们的目标就是把slug里的冗余内容全部砍掉,只留运行必需的文件。


1. 拆分依赖,只保留生产必需的包

首先打开你的package.json,把所有开发时才用的工具包(比如jest、eslint,甚至react-scripts其实也属于这类)移到devDependencies里——因为构建完成后,这些包在生产环境根本用不上。

然后,默认情况下Heroku会安装所有依赖(包括开发依赖),我们要修改构建脚本,让它只装生产依赖:

  • 用npm的话,在scripts里新增heroku-postbuild:
    "scripts": {
      "build": "react-scripts build",
      "heroku-postbuild": "npm install --only=production && npm run build"
    }
    
  • 用yarn的话改成:
    "scripts": {
      "build": "react-scripts build",
      "heroku-postbuild": "yarn install --production && yarn build"
    }
    

这样Heroku会先安装生产依赖,再执行构建,开发依赖不会被打包进slug,能省出几百MB空间。

2. 用.slugignore排除冗余文件

在项目根目录创建一个.slugignore文件(和.gitignore同级),把所有不需要部署的文件列进去,比如:

/node_modules
/src
/public
/.git
README.md
package-lock.json
yarn.lock

⚠️ 注意:别把build文件夹排除了!这是我们构建好的静态产物,必须留着。

3. 切换到静态网站Buildpack(最彻底的方案)

如果你的项目是纯前端、不需要Node.js后端服务,直接用Heroku官方的静态网站Buildpack,这样slug里只会有build文件夹,体积瞬间降到几十MB以内:

  1. 先在Heroku后台或CLI里移除默认的node.js buildpack:
    heroku buildpacks:remove heroku/nodejs
    
  2. 添加静态buildpack:
    heroku buildpacks:add heroku/static
    
  3. 根目录创建static.json文件,配置静态资源路径:
    {
      "root": "build/",
      "clean_urls": true,
      "routes": {
        "/**": "index.html"
      }
    }
    

重新部署后,Heroku会直接用静态文件服务托管你的项目,完全跳过Node.js依赖,体积问题直接解决。

4. 额外优化:进一步压缩体积

  • 执行npm dedupe或yarn dedupe去重依赖,减少node_modules的冗余;
  • 构建后的静态文件已经被create-react-app压缩过,但你可以在static.json里配置Heroku自动启用brotli压缩,进一步减小文件体积。

亲测这些方法组合起来,原本700MB的项目,最终slug大小能降到50MB左右,完全符合Heroku的限制。

内容的提问来源于stack exchange,提问作者Davon Wilson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:52:50