从同一文件夹中包含无服务器 yml 中的排除包

Include exclude packages in serverless yml from same folder

我有一个 node_modules 文件夹,我只想排除几个模块,但在打包时应该添加其他模块。我该怎么做 that.Also 如何使用正则表达式排除某些模块。就像在我的 node_modules 中一样,我创建了以 md-request、md-models 等开头的自定义模块,所以我只想从打包中排除这些模块。 提前致谢。

很可能您正试图排除开发依赖性。使用 npm i some-dependency --save-dev 安装开发依赖项,默认情况下,Serverless 不会将它们打包到最终工件中。

如果这还不够,您可以排除所有内容,仅包含您需要的内容。

您可以了解 Serverless 在打包工件时的行为方式,以及如何 exclude/include 依赖于 official docs

这是一个示例(从他们的文档中提取)排除 node_modules 但要保留 node_modules/node-fetch(这正是您要找的) ):

package:
  exclude:
    - node_modules/**
    - '!node_modules/node-fetch/**'

这就是您如何 仅包含您需要的内容:

package:
  exclude:
    - src/**
  include:
    - src/function/handler.js

编辑:在 OP 的评论之后,这里是处理所需行为的方法:

package:
  exclude:
    - node_modules/my_module_1/**
    - node_modules/my_module_2/**
    - node_modules/my_module_3/**
    - node_modules/my_module_4/**

如果模块名称彼此非常接近,如上,您可以使用通配符*将它们全部排除在一行中:

package:
  exclude: 
    - node_modules/my_module_*/**

编辑 2:这是一个工作示例(看到我排除了 aws-sdk):

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

由于包太大,我无法通过 AWS Lambda 的控制台看到它,我附上了两张截图 - 一张有排除,一张没有排除(查看包大小如何变化)。

排除:

没有排除:

这样你甚至不需要添加 '!node_modules/whatever-i-want-to-keep' 参数

编辑 3:在示例项目中使用 * 通配符,手动创建 node_modules 和相应的 my_module_* 目录