AWS Lambda - Error: Cannot find module 'uuid/v4'

AWS Lambda - Error: Cannot find module 'uuid/v4'

我在 AWS Lambda JavaScript 代码中尝试使用 UUID 模块时收到此错误。

Error: Cannot find module 'uuid/v4'

我没有使用 AWSCLI 或 NPM,而是使用 AWS Lambda 仪表板在 JavaScript.

中编写 Lambda 函数

const AWS = require('aws-sdk');
const AWSUUID = require('uuid/v4');
const AWSGamelift = new AWS.GameLift();

exports.handler = async (event) => 
{
 //...

我一直在搜索 Google 不停地试图找到一种方法来让 UUID 模块工作。我不想设置和使用 NPM 环境。

AWS Lambda 仪表板上是否有一些方法可以为 Lambda 代码提供对 UUID 模块的访问?

如果我们不想设置任何 npm 环境,AWS Lambda Layers 是一个选项。

从 AWS 控制台为您的 from Lambda 函数创建一个新层,并上传包含 uuid npm 包的 node_modules 目录的 zip 文件。

完成这项工作需要记住的几件事:

  1. 必须按照 AWS 文档维护目录结构 https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path

这很重要,否则 Lambda 函数将无法识别包。

  1. 您的 Lambda 函数的 IAM 角色必须具有 lambda:GetLayerVersion 操作权限,否则会出现丢失包的问题。上面提到的文档中再次清楚地解释了这一点。

完成这些后,您就可以执行您的代码了。示例响应

nodejs文件夹结构如下

您需要安装 uuid 包。 uuid最近做了一个breaking change,就用你的方式吧。新方法是

const {"v4": uuidv4} = require('uuid');

希望对您有所帮助。

导航到该文件,并查看 node_modules/expo-constants/exponentConstants.web.js

中的第 3 行
import uuidv4 from 'uuid/v4

并将其更改为:

import {v4 as uuidv4} from 'uuid';

发生此错误的原因是 node_modules/uuid 中的文件结构,如果您发现不再有要导入的 uuidv4,而是导出 v4。您可以将开发人员编写 uuidv4 的所有地方更改为 v4,但使用 {this as that} 语法您不必重写一堆代码。

我使用完整路径并且它有效,因为我的文件不在 node_module 文件夹中:

const uuidv4 = require('./chat-server/node_modules/uuid').v4;

在我的例子中,我只需要导入 uuid,因为它被一些 graphql 包使用。