gpt4 book ai didi

amazon-web-services - 如何使用 lerna 将 monorepo 代码部署到 AWS Lambda?

转载 作者:行者123 更新时间:2023-12-04 11:37:02 25 4
gpt4 key购买 nike

我正在尝试制作两个 AWS Lambda 函数(用 typescript 编写)。这两个函数共享用于与 API 交互的相同代码。为了不必将相同的代码复制到两个不同的 Lambda,我想将我的共享代码移动到本地模块,并使我的两个 Lambda 都依赖于该模块。

我最初尝试在两个 lambda 之间启动代码是使用 monorepo 和 lerna。我目前的项目结构是这样的:

- lerna.json
- package.json
- packages
- api
- package.json
- lambdas
- funcA
- package.json
- func B
- package.json

lerna.json:
{
"packages": [
"packages/api",
"packages/lambdas/*"
],
"version": "1.0.0"
}

在我的 Lambda 函数的每个 package.json 中,我能够包含我的本地 api 模块,如下所示:
"dependencies": {
"@local/api": "*"
}

有了这个,我已经能够将公共(public)代码移动到它自己的模块中。但是,我现在不确定如何捆绑我的函数以部署到 AWS Lambda。 lerna 有没有办法创建一个可以部署的包?

最佳答案

cp -rL在 mac 上不起作用我不得不想出类似的东西。

如果您的所有包都属于一个范围 (@org),那么这是一个有效的工作流程:

在您的 lerna 存储库的 package.json 中:

"scripts": {
"deploy": "lerna exec \"rm -rf node_modules\" && lerna bootstrap -- --production && lerna run deploy && lerna bootstrap"
}

在包含 lambda 函数的包中:
"scripts":{
"deploy": "npm pack && tar zxvf packagename-version.tgz && rm -rf node_modules/@org && cp -r node_modules/* package/node_modules && cd package && npm dedupe"
}

现在用项目的相应值替换“packagename-version”和“@org”。还将所有依赖包添加到“bundledDependencies”。

运行后 npm run deploy在您的 lerna mono 存储库的根目录中,您最终会在包含您的 lambda 函数的包中得到一个文件夹“包”。它具有运行您的函数所需的所有依赖项。从那里拿走。

我曾希望使用 npm pack将允许我使用 .npmignore 文件,但似乎这不起作用。如果有人知道如何使它工作,请告诉我。

关于amazon-web-services - 如何使用 lerna 将 monorepo 代码部署到 AWS Lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53712169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com