Serverless framework 如何使用excludedevdependency?
看完文件后: 我制作了一个示例来测试这个配置 这是我的Serverless framework 如何使用excludedevdependency?,serverless-framework,Serverless Framework,看完文件后: 我制作了一个示例来测试这个配置 这是我的无服务器.yml: service: exclude-development-dependencies provider: name: google runtime: nodejs project: just-aloe-212502 credentials: /Users/ldu020/workspace/nodejs-serverless-framework/.gcp/nodejs-starter-7e52b0f6fe39
无服务器.yml
:
service: exclude-development-dependencies
provider:
name: google
runtime: nodejs
project: just-aloe-212502
credentials: /Users/ldu020/workspace/nodejs-serverless-framework/.gcp/nodejs-starter-7e52b0f6fe39.json
plugins:
- serverless-google-cloudfunctions
package:
exclude:
# - node_modules/**
- .gitignore
- .git/**
excludeDevDependencies: true
functions:
excludeDevDependencies:
handler: excludeDevDependencies
events:
- http: path
问题是excludedevdependency
只有在我对exclude
-node\u modules/**
进行注释时才能正常工作
它将生成.serverless
目录,并排除开发依赖项。zip
包含依赖项
节点模块
但是对于GCP
,您不需要上传node\u模块。您只需将package.json
和package lock.json
文件上传到GCP
GCP
将基于package lock.json
安装node\u模块
那么,我应该在什么时候使用排除依赖性?这是预期的行为,不是吗
您不会将节点\u模块
放入exclude。package.json
中的任何依赖项都应该加载到无服务器包中。如果您有excludedevdependency:true
,则package.json
中的任何开发依赖项都将被排除
GCP将基于package-lock.json安装节点_模块
我不知道GCP是什么,但当没有本地文件存储时,您希望它如何在lmabda上安装package.json
lambda运行所需的任何节点模块都必须包含在无服务器软件包中。我也有同样的问题,如果我使用了节点模块的包含,那么还包括开发依赖项。一段时间后,我发现您只需添加节点单元模块
和您感兴趣的任何文件夹,而不排除它们,方法是使用:
exclude:
- '!folderyouwanttoadd/**'
- '!fileyouwanttoadd'
- '!node_modules/**'
包含isexcludeDevDependencies:true
是可选的,因为它是默认设置的。我认为这是Serverless的一个bug,它应该可以直接工作 您可以在serverless.yml
文件的包中提供excludedevdependency
设置
默认情况下,它已经定义为true,因此将其显式设置为true不会产生影响,除非明确说明存在这样的配置。只有将其设置为false,才会产生影响
使用此功能时,例如在运行无服务器软件包
或无服务器部署
时,CLI将遵循以下步骤:
读取根package.json
文件中列出的所有依赖项/devdependency
遍历依赖关系树,并在/node\u modules
文件夹中查找所有模块/子模块位置
如果定义了包含
/排除
路径,则分别标记这些路径以供包含/排除
去掉依赖关系派生树派生的路径,但保留依赖关系树所需的路径
返回生成的路径列表,该列表将是包中仅包含的路径,最终将上载到无服务器提供商
例如,这对于无服务器的AWS Lambda环境是有意义的,在这个环境中,您必须将所需的确切源作为一个完整的包上载
现在,由于您声明在GCP的情况下,软件包由提供商处理/安装,因此您不需要上传任何node_模块
路径,因此您应该使用exclude
设置将serverless.yml
中的整个文件夹设置为排除,以确保安全
额外说明:
过去,该excludeDevDependencies
功能存在一些错误,导致它在某些情况下无法正常工作,但其中许多(如果不是全部的话)已在最新的2.x版本中得到解决
你可以在他们的网站上找到它们,寻找“打包”功能
如果发生这种情况,请考虑升级到最新版本,即2.25.0。今天,
添加它,然后声明“不需要自己添加,这个插件是为你做的”。