如何排除无服务器中的嵌套文件夹?

How can I exclude nested folders in serverless?

我正在使用 serverless 框架将 lambda 部署到 AWS。我发现我的项目中有许多嵌套的 node_modules 文件夹,它们占用超过 250MB 的数据。我认为它们来自具有冲突版本依赖项的第三方依赖项。如何排除 serverless.yml 中所有嵌套 node_modules 的包装?

package:
  exclude:
    - nodejs/node_modules/aws-sdk/**
    - nodejs/node_modules/**/node_modules

我已经试过上面的配置,但并没有排除它们。

在更大的 node_modules 目录中排除 node_modules 文件夹不是最好的方法,因为这最终会破坏所涉及的包含模块(在这种情况下,它们可能不存在于全部)。

最好的办法是使用 serverless-webpack. Webpack includes tree shaking,这将大大缩小部署包的大小。

以上内容应该足够了,但您可以通过在 serverless.yml 中包含以下内容来进一步优化:

package:
  individually: true
  excludeDevDependencies: false

这会为您的每个 lambda 表达式创建单独的部署包,并排除所有开发依赖项。 (它们是不相关的,所以如果您愿意,您可以只使用一个或另一个。)您在问题中只提到了一个 lambda,但考虑到 node_modules 的大小,我猜您确实有多个 lambda。

如果你只有一个 lambda,它可能会很大,所以我建议将它拆分成多个由 step function 协调的较小的 lambda。 Serverless 也处理步骤函数的部署,因此您可以在 serverless.yml 文件中很好地一起管理所有资源。