无法部署应用至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以内:
- 先在Heroku后台或CLI里移除默认的node.js buildpack:
heroku buildpacks:remove heroku/nodejs - 添加静态buildpack:
heroku buildpacks:add heroku/static - 根目录创建
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
相关产品推荐
相关产品推荐

