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

Vai*_*til 6 amazon-web-services node.js aws-lambda serverless-framework serverless

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

Tha*_*ssi 8

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

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

您可以了解 Serverless 在打包工件时的行为方式以及如何排除/包含官方文档中的依赖项

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

package:
  exclude:
    - node_modules/**
    - '!node_modules/node-fetch/**'
Run Code Online (Sandbox Code Playgroud)

这就是您可以仅包含您需要的内容的方式:

package:
  exclude:
    - src/**
  include:
    - src/function/handler.js
Run Code Online (Sandbox Code Playgroud)

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

package:
  exclude:
    - node_modules/my_module_1/**
    - node_modules/my_module_2/**
    - node_modules/my_module_3/**
    - node_modules/my_module_4/**
Run Code Online (Sandbox Code Playgroud)

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

package:
  exclude: 
    - node_modules/my_module_*/**
Run Code Online (Sandbox Code Playgroud)

编辑 2:这是一个工作示例(请参阅我不包括 aws-sdk):

package:
 exclude:
  - node_modules/aws-sdk/**
Run Code Online (Sandbox Code Playgroud)

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

与排除:

在此处输入图片说明

不排除:

在此处输入图片说明

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

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

在此处输入图片说明

在此处输入图片说明


giv*_*ivo 5

我认为无服务器最新版本(3.x)不再支持该exclude关键字。我能够使用以下方法使其工作:

package:
  patterns:
    - src/**               # include only files from ./src/**/*
    - '!node_modules/**'   # exclude files from ./node_modules/**/*
Run Code Online (Sandbox Code Playgroud)