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/**'

包含is
excludeDevDependencies: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。今天,

    添加它,然后声明“不需要自己添加,这个插件是为你做的”。