Vai*_*til 6 amazon-web-services node.js aws-lambda serverless-framework serverless
我有一个 node_modules 文件夹,我只想排除几个模块,但在打包时应该添加其他模块。我该怎么做。还有如何使用正则表达式排除某些模块。就像在我的 node_modules 中,我创建了以 md-request、md-models 等开头的自定义模块,所以我只想从打包中排除这些模块。提前致谢。
您很可能正在尝试排除开发依赖项。安装您的开发依赖项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_* 目录的示例项目中使用通配符
我认为无服务器最新版本(3.x)不再支持该exclude关键字。我能够使用以下方法使其工作:
package:
patterns:
- src/** # include only files from ./src/**/*
- '!node_modules/**' # exclude files from ./node_modules/**/*
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6726 次 |
| 最近记录: |