可以采取几个步骤来减小段塞尺寸。
清除构建缓存
Buildpack 会缓存一些内容以加快未来的构建速度。但有时,当您的依赖项发生更改时(特别是当您删除依赖项时),它可能不会从缓存中删除。因此,如果您面临意外的高 slug 大小,并且您已从项目中删除了一些依赖项,请首先尝试此操作(如果您可以忍受下一次部署时的缓慢构建)。
$ heroku plugins:install heroku-repo
$ heroku repo:purge_cache -a appname
忽略带有 .slugignore 的文件
您的 .sligignore 应列出存储库中的目录和文件(不被 .gitignore 忽略),但应用程序在产品上运行不需要的目录和文件。此类文件的一些示例是测试、文档和设计文件。要从 slug 中删除它们,请在项目的根目录下创建一个 .slugignore。
*.psd
/doc
/test
要查看 slug 中放入了哪些文件,您还可以输入 heroku
bash 并检查文件系统。
heroku run bash -a appname
du -sh .[^.]* * | sort -hr
节点模块
这部分特定于包含将所有 JavaScript 代码捆绑到单个脚本的资产管道的应用程序。如果您使用的是节点服务器,这可能不适用于您。
如果您将 Rails 与 webpacker 一起使用,则在 node_modules 中可能有很多依赖项。但是在资产管道编译资源之后,您可能不需要 node_modules 目录(除非您在运行时运行使用这些模块的自定义节点脚本)。要在这种情况下删除 node_modules 目录,我们可以使用带有 .slug-post-clean 文件的 heroku-buildpack-post-build-clean 构建包。该文件的格式与 .gitignore 或 .sligignore 相同,因此只需列出您想要从最终 slug 中忽略的目录,它们就会被删除。使用构建包要确保的一件事是,这应该是顺序中的最后一个,否则它将在实际构建包运行之前删除文件。
但是,如果您使用在运行时访问 node_modules 的自定义节点脚本怎么办?在这种情况下,我们要做的就是将这些脚本移动到一个单独的目录,并使用它自己的 package.json 文件。要将依赖项与根 package.json 一起安装到该目录中,请将安装后脚本添加到根 package.json 中。这将指示yarn将目录更改为您的自定义脚本,并在安装根项目的依赖项后在那里安装依赖项。
"scripts": {
"postinstall": "yarn --cwd lib/custom-node-script"
}
这样,即使在生产 Rails 应用程序中使用自定义节点脚本,您也可以安全地删除根 node_modules 目录。
这是详细的帖子 https://sapandiwakar.in/reducing-heroku-slug-size/解决同一问题。