我有以下项目树
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
layer1仅包含UUID软件包。
因此,当我尝试使用无服务器脱机插件在本地运行lambda时,它说找不到模块UUID。
但是,当我将代码部署到AWS时,它运行得像灵符。
有什么办法可以让lambda层在本地运行以进行测试?为了加快发展速度?
或者有什么方法可以在开发过程中动态设置node_module路径以指向图层文件夹,一旦我需要投入生产,它将更改为正确的路径
答案 0 :(得分:4)
好几次尝试后,我找到了可行的解决方案
我添加了一个npm run命令,该命令将临时的node_module路径导出到路径列表中
"scripts": {
"offline": "export NODE_PATH=\"${PWD}/nodejs/node_modules\" && serverless offline"
},
因此,节点可以在子文件夹中查找节点模块
答案 1 :(得分:0)
我通过在容器中运行serverless-offline并使用gulp将各层复制到/ opt /目录中来解决此问题。我设置了一个gulp watch来监视所有图层更改并将其复制到/ opt /目录。
答案 2 :(得分:0)
我通过从本地文件系统安装一个层作为开发依赖项,在无服务器脱机状态下使用层。
import { Dimensions } from 'react-native';
const { width, height } = Dimensions.get('window');
答案 3 :(得分:-1)
顺便说一句,此问题已在SLS 1.49.0中修复。 只需运行:
sudo npm i serverless
然后,您应在serverless.yml的图层部分中指定包含的软件包
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
package:
include:
- node_modules/**
name: ${self:provider.stage}-layerName # optional, Deployed Lambda layer name
functions:
hello:
handler: handler.hello
layers:
- {Ref: Layer1LambdaLayer}
events:
- http:
path: /dev
method: get
在nodejs10.x运行时上测试