【问题标题】:Nodejs 模块化 aws-sdk v3 的大小越来越大
【发布时间】:2021-06-03 21:18:56
【问题描述】:

我正在尝试减小使用 aws-sdk 的 nodejs lambda 包的大小。 这是原始的 lambda package.json 文件:

{
  "name": "lambdanodejs",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "aws-sdk": "^2.784.0",
    "bluebird": "^3.7.2",
    "ioredis": "^4.19.2",
    "redis": "^3.0.2",
    "redis-clustr": "^1.7.0"
  }
}

整体大小为57MB,54属于aws-sdk。

为了减小大小,我尝试使用特定的客户端服务 (v3 sdk)。 关注:https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-secrets-manager/package.json

{
  "name": "lambdanodejs",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@aws-sdk/client-dynamodb": "^3.7.0",
    "@aws-sdk/client-secrets-manager": "^3.7.0",
    "bluebird": "^3.7.2",
    "ioredis": "^4.19.2",
    "redis": "^3.0.2",
    "redis-clustr": "^1.7.0"
  }
}

现在 npm install 会产生更大的大小,大约 190+MB。 同样在 node_modules 中,我看到很多使用以前的 package.json 安装时不存在的目录。 这个 v3 aws-sdk 应该更轻。 我错过了什么吗?

谢谢!

【问题讨论】:

  • 您能分享一下您是如何捆绑工件的吗?或者你只是压缩你的源文件夹,包括node_modules 文件夹?
  • @s.hesse 我正在压缩 node_modules 以及其他文件。这些提到的大小是在压缩之前,但根据文章/博客,它的大小应该更小,至少与 aws-sdk 相比,它应该小得多。
  • 好的。在迁移到新的 SDK 之前,您是否清理了 node_modules 文件夹?也许旧的 SDK 文件夹仍然存在。
  • @s.hesse 是的,我已经删除了 package-lock.json 和 node_modules 。
  • 有趣.. 所以我只是以您的示例 package.json(使用 AWS SDK v3)并运行 npm install 并在 node_modules 中有大约 22MB 的数据。不知道你还能做些什么......或者,尝试使用类似esbuild 的东西来生成一个工件 -> 它会将所有内容捆绑到一个文件中并丢弃所有不必要的代码。

标签: node.js amazon-web-services aws-lambda aws-sdk-nodejs


【解决方案1】:
  • 不要将 aws-sdk 推送到 lambda 函数。如果您想在本地开发环境中使用它,请全局安装它。
  • Lambda 将在运行时提供所有必需的 SDK 模块(v2 和 v3),只需在代码中导入即可。
  • 不要将 aws-sdk 捆绑在 zip 中。
  • 如果您的 zip 大小越来越大,请在 lambda 中使用层。
  • 将 node_moudles 导入 lambda 层。
  • 然后将您的代码上传到 lambda。

【讨论】:

  • 你的意思是我不需要 package.json 用于 aws 模块,我可以直接从代码调用 import 并且这些模块在运行时可用?
  • 不要在 package.json 和项目 node_modules 中包含 aws-sdk 或任何版本的 aws-sdk
  • 将 s3 put 对象角色分配给您的 lambda,在 lambda 控制台中为 s3 put 对象编写代码并执行它。出于测试目的试试这个
  • 将在没有任何外部包捆绑的情况下试用它。
  • 似乎 lambda nodejs 环境预装了 aws-sdk v2,但没有预装 v3:stackoverflow.com/questions/66129993/…
猜你喜欢
  • 1970-01-01
  • 2014-05-02
  • 2016-07-18
  • 2022-11-02
  • 2017-10-15
  • 2019-07-01
  • 2019-01-04
  • 1970-01-01
  • 2017-02-08
相关资源
最近更新 更多