【问题标题】:Heroku Slug Size too large - nodejsHeroku Slug 尺寸太大 - nodejs
【发布时间】:2020-11-08 02:28:17
【问题描述】:

这是我的第一个 heroku 应用程序...我看到我的 heroku slug 大小为 296MB...快要接近 300MB 的启动时间了。

这是一个安装了 ejs、path 和 express 的 puppeteer 应用程序。我有一堆静态文件,但它们似乎并没有占用大部分空间..

非常感谢您的帮助!

编辑: 我的 package.json 现在看起来像这样(看不到我如何真正削减我的 node_modules - 事实上,我想在进一步开发我的应用程序时添加更多依赖项):

    "scripts": {
    "start": "node server.js",
    "heroku-postbuild": "curl -sf https://gobinaries.com/tj/node-prune | PREFIX=. sh&&./node-prune"
  },
  "dependencies": {
    "ejs": "^3.1.5",
    "express": "^4.17.1",
    "path": "^0.12.7",
    "puppeteer": "^5.3.1"
  }

【问题讨论】:

  • .apt 文件夹(或文件)中有什么?我从未见过任何与此相关的项目。
  • @Take-Some-Bytes 甚至不知道如何进入这些文件夹。这对我来说是新的。太奇怪了,这一切怎么这么大。我想最终向我的应用程序添加更多依赖项,但如果超出限制,我不能...
  • 要进入这些文件夹,你需要cd 到那个.apt 文件夹,然后运行ls。
  • @Take-Some-Bytes 哦,对了!不敢相信我没想到。忘记了 heroku bash 实际上是命令行。会尝试的。你觉得其他文件夹大小正常吗?
  • 你的仓库中的.apt 文件夹之前 heroku 对它做了什么吗?如果是,有必要吗?

标签: node.js heroku slug


【解决方案1】:

由于 Puppeteer 占用了如此多的 Heroku slug 大小,因此操作空间真的很小。目前,坚持使用 Node 12 和 Puppeteer 2.0.0 将确保您能够将 Heroku slug 大小保持在 300M 以下。

在你的 package.json 中使用这些:

"dependencies": {
    "puppeteer": "2.0.0"
}

"engines": {
    "node": "12.x"
}

如果你升级 node 或 puppeteer 的版本号,即使你几乎没有其他依赖项,你的 slug 大小也会超​​过 300M。

我使用 Puppeteer 2.0.0 的另一个原因是我需要使用 waitForFileChooser() 函数将媒体文件上传到某些网站。但是 waitForFileChooser() 在 Puppeteer 2.1.1 中被破坏了。而且它在 5.5.0 中仍然被破坏。

另外,我认为 Node 12 和 Puppeteer 实际上相当稳定。因此,为了帮助 Heroku 管理其出色的免费服务的成本,我可以接受一点版本滞后。

【讨论】:

  • 感谢您的回答...感谢。实际上,@Take-Some-Bytes 上面的答案设法将我的 slug 大小减少了 11MB... 相当可观.. 我的应用程序是 289MB slug 大小,其中一些依赖项比此处列出的要多 - 使用最新版本的节点 &傀儡师。
  • @Moshe 我只记得 waitForFileChooser 在 Puppeteer 2.1.1 中被破坏了。因此,如果您需要使用 Puppeteer 上传媒体文件,我建议您使用 Puppeteer 2.0.0 作为一个不错的版本。
【解决方案2】:

在 cmets 中进行了所有讨论后,我意识到一件事:您不能在 Heroku dynos 中删除文件夹!而且您可能无论如何都不想...这些文件夹看起来很重要(请记住:Heroku dynos 通常是 mini-linux 操作系统,因此 .apt 文件夹可能包含其中一些 mini-linux 操作系统文件)。当然,那些.apt 和.heroku 文件夹可能不会增加你的slug 大小。很抱歉那场大乱斗。

所以?让我们减少真正重要的东西的大小。

第一:减小node_modules 的大小。

由于您的node_modules 文件夹是您可以控制的最大文件夹,让我们从那里开始。我们将关注this 文章。我将修改一些指令,以便它们与 Heroku 一起使用。

  1. 减少依赖项的数量:这听起来很简单,但它有很大帮助。想想你安装的包。你真的需要它们吗?如果你这样做了,是否有一个更轻量级的包可以用来代替?示例:

很多时候我看到人们安装 Jest 只是为了进行简单的单元测试(大约 460 多个依赖项,+/-60MB),而有更小的库可以做完全相同的事情(Mocha – 115 个依赖项,12MB)。 2. 删除不需要的文件:除了安装包时通常安装的(.js文件等),还有很多...不需要的垃圾包括(READMEs,@ 987654330@s,源文件...)。因为您无法手动删除这些文件(以及谁想要),所以您需要使用自动化工具和Heroku build scripts。这是一个示例(将其放入 package.json 时删除 cmets)。

"scripts": {
  // Other scripts...
  // The following script dowloads node-prune (https://github.com/tj/node-prune)
  // in the current build directory and runs it.
  // The following script is run AFTER Heroku installs dependencies, but BEFORE
  // Heroku caches them.
  // EDIT: You have to do `./node-prune` instead of `node-prune`.
  "heroku-postbuild": "curl -sf https://gobinaries.com/tj/node-prune | PREFIX=. sh&&./node-prune"
}

安德...

这就是你所能做的。那篇文章中提到的其他步骤对 Heroku 没有帮助。正如你已经提到的,你的静态文件并没有真正占用太多空间——它实际上只是node_modules。我想不出任何其他方法来减少您的 slug 大小(除非您想将静态文件移动到外部存储设施并执行一些晦涩的获取和缓存操作以将它们提供给客户端......)。

注意:我没有尝试过这些步骤。这些理论上应该有效,但我不肯定它们是否有效。

【讨论】:

  • 我根本无法修剪我的节点模块。我需要这些依赖项。 (我用我的 package.json 的样子更新了问题)。问题是我有两个 heroku buildpacks-nodejs 和 puppeteer ......你认为我应该删除它们吗?这是一个 puppeteer 应用程序,我认为这将有助于将 puppeteer 加载到 heroku 中......我对这一切都很陌生(第一个应用程序)。
  • 尝试了 heroku postbuild... 构建失败。我将错误日志放在原始问题中。感谢您的帮助!
  • 抱歉我的无知,但是从 NPM 注册表安装 path 模块有什么用? Node.JS 中包含的path 模块不是很好吗?
  • 快递需要。说实话,我并不完全 100% 确定自己。将尝试更新的 curl 命令。我很难相信任何有这些依赖关系的人都会超过 slug 的大小限制。我的意思是它是 500mb 但在 300 之后它会很慢...我想在我的应用程序中添加 mongoose 和其他几个...我希望我不会遇到麻烦...
  • 修剪脚本有效,谢谢。这节省了 4.2mb,不多,但也有一些。我的总数仍然达到 286.9M .. 这有点令人不安,因为我距离超过 300mb 的建议限制还有 14mb 的距离。我真的不明白……这是否意味着我不能在 heroku 上拥有更大的应用程序?如果我添加更多依赖项,它看起来会超过限制。难道我做错了什么?感谢您的所有帮助!
【解决方案3】:

我想参与这个讨论,因为我遇到了同样的问题,并且因为 500MB 的限制而无法让它工作,我真的很沮丧。我尝试了各种方法来减少它,但我发现即使我将它缩小到 500MB 以下,性能也会大大降低。所以我决定做的是为 Puppeteer 提供一个单独的专用服务器,并从我的代码库中完全删除 Puppeteer 部分,这将我的 slug 大小减少了 200+MB。 看看它: https://github.com/davidjuhyung/puppeteer-api

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2020-03-26
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多