从lambda层加载时,无服务器的脱机未定义模块

ِAl*_*ush 5 amazon-web-services serverless-framework serverless

我有以下项目树

在此处输入图片说明

其中nodejs文件夹是以下serverless.yaml中定义的lambda层

service: aws-nodejs # NOTE: update this with your service name


provider:
  name: aws
  runtime: nodejs8.10
  stage: dev

plugins:
  - serverless-offline
layers:
  layer1:
    path: nodejs # required, path to layer contents on disk
    name: ${self:provider.stage}-layerName # optional, Deployed Lambda layer name

functions:
  hello:
    handler: handler.hello
    layers:
      - {Ref: Layer1LambdaLayer}
    events:
      - http:
          path: /dev
          method: get
Run Code Online (Sandbox Code Playgroud)

layer1仅包含UUID软件包。

因此,当我尝试使用无服务器脱机插件在本地运行lambda时,它说找不到模块UUID。

但是,当我将代码部署到AWS时,它的运行就像一个魅力。

有什么办法可以让Lambda层在本地运行以进行测试?为了加快发展?

还是有什么方法可以在开发过程中动态设置node_module路径以指向图层文件夹,一旦我需要进行生产,它将路径更改为正确的路径

ِAl*_*ush 6

好几次尝试后,我找到了可行的解决方案

我添加了一个npm run命令,该命令将临时的node_module路径导出到路径列表中

"scripts": {
    "offline": "export NODE_PATH=\"${PWD}/nodejs/node_modules\" && serverless offline"
  },
Run Code Online (Sandbox Code Playgroud)

因此,节点可以在子文件夹中查找节点模块

  • 很好的一个解决方案。但如果您有多个模块该怎么办? (2认同)