AWS Lambda - 错误: 找不到模块 'uuid/v4'

13

当我尝试在 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模块的访问权限?


也许有一个适用于此的 Lambda 层?其中一个层存储库在这里。如果那里的层都不包含 uuid,可以寻找其他层(或创建自己的层)。 - Marcin
或者,如果uuid库“小”,您可以将其与您的代码捆绑在一起。 - Marcin
7个回答

18

你需要安装 uuid 包。最近 uuid 对使用方式做出了一个重大变更,请注意。新的使用方法为

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

希望这有所帮助。


1
这似乎不再起作用了,我收到一个错误消息:错误:找不到模块“uuid”,有解决方法吗? - Learner120

2
现在作为默认的Nodejs Lambda的一部分,您可以使用crypto:
导入{ randomUUID } from "crypto";
用法: console.log("randomUUID: " + randomUUID());

0

前往该文件,并查看 node_modules/expo-constants/exponentConstants.web.js 文件中第三行附近的内容。

import uuidv4 from 'uuid/v4

并将其更改为:

import {v4 as uuidv4} from 'uuid';

这个错误是由于node_modules/uuid中的文件结构引起的,如果你看一下,就不再有一个uuidv4可以导入,而是他们导出了一个v4。你可以将开发人员编写的所有uuidv4更改为v4,但使用{ this as that }语法,你不必重写大量的代码。


0

我使用完整路径,因为我的文件不在node_module文件夹中,所以它可以正常工作:

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

0

我有解决所有 Lamba UnhandledCannot find module 'uuid/v4' 错误的方案,包括提问者遇到的问题。

首先,Lambda 错误是由于在 amplify/backend/function/function_name/src/package.json 文件中缺少模块而引起的。

看一下我的代码,我已经在这个 package.json 文件中排除了 uuid 模块,因此出现了错误:

Cannot find module 'uuid/v4'

{
  "name": "createorder",
  "version": "2.0.0",
  "description": "Lambda function generated by Amplify",
  "main": "index.js",
  "license": "Apache-2.0",

  "devDependencies": {
    "@types/aws-lambda": "^8.10.92"
  }
}

package.json文件中包含模块后,我解决了错误问题。

之后,在amplify/backend/function/function_name/srcsrc文件夹中运行命令npm install

这是我最终得到的新代码:

{
  "name": "createorder",
  "version": "2.0.0",
  "description": "Lambda function generated by Amplify",
  "main": "index.js",
  "license": "Apache-2.0",
  "dependencies": {
    "uuid": "^8.2.0"
  },
  "devDependencies": {
    "@types/aws-lambda": "^8.10.92"
  }
}

谢谢!:)


0
在我的情况下,我只需要导入uuid,因为它被一些graphql包使用。

0

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

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

要使其正常工作,请记住以下几点:

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

enter image description here

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

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

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

enter image description here

Node.js 的文件夹结构如下所示

enter image description here


我试了试,但好像没有起作用。 - DevilsD
你能否展示一下你的 package.zip 结构?我从 Github 下载了 UUID 包并将其放置在 .ZIP 文件中。uuid-sdk.zip nodejs/node_modules/uuid - DevilsD
请将 package.json 也放入您的 zip 文件中。package.json 只包含 uuid 作为依赖包,位于 nodejs 文件夹下。nodejs 文件夹将包含 package.json 和 node_modules 文件夹,而 node_modules 文件夹则将包含 uuid 包。 - Raj
@mattyman174,我已经在原回答中添加了我的Node.js文件夹结构截图。请尝试一下。 - Raj
这个更改似乎没有帮助。我会验证权限是否已正确设置,以确保一切正常。我很惊讶UUID还不可用,因为AWS已经在使用它了。 - DevilsD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接