我正在尝试根据 CDK V2 的
文档组织
new CodePipeline
。我的项目有很多 NodejsFunction
的实例。虽然 Code Build 可以安装根 package.json 依赖项,但我正在努力寻找一个有组织的解决方案来为每个 Lambda 函数安装每个 package.json。
文件夹结构示例:
-Root
--src
---lambdaHandlers
----lambdaOne
-----index.ts
-----package.json
-----package-lock.json
----lambdaTwo
-----index.ts
-----package.json
-----package-lock.json
我需要代码构建进入每个文件夹并安装 NodejsFunction
依赖项,以删除以下代码构建错误消息:
error TS2307: Cannot find module '@aws-sdk/client-sfn' or its corresponding type declarations
。
注意: 一切正常,并使用 cdk deploy --all 进行部署。
代码管道CDK:
this.codePipeline = new CodePipeline(this, `${environment}-${appName}-`, {
pipelineName: `${environment}-${appName}-`,
selfMutation: true,
crossAccountKeys: false,
role: this.codePipelineRole,
dockerEnabledForSynth: true,
synth: new ShellStep("Deployment", {
input: CodePipelineSource.codeCommit(this.codeRepository, environment, { codeBuildCloneOutput: true }),
installCommands: ["npm i -g npm@latest", "npm install -g typescript"],
commands: [
"npm ci",
"npm run build",
"cdk synth",
],
})
});
我尝试的一个解决方案是对每个 Lambda 函数使用下面this.codePipeline
的命令部分中的代码。虽然这适用于安装软件包,但我留下了打字稿错误:
"cd src/lambda-handlers/api-gateway-entry-points/entryPointMagentoCredits", "npm ci"
收到错误: intoMagentoQueueConsumer/node_modules/axios/index.d.ts(6,18): error TS1005: ']' expected.
完全错误
解决方案:
cd
进入每个
NodejsFunction
文件夹并在构建命令中安装依赖项。
NodejsFunction
依赖项应存储在根package.json文件中
NodejsFunction
处理程序都可以存储在代码中的任何位置,并使用
entry
键值对引用,或存储在 lib 文件夹 (DOCS) 中。
新文件结构:
-Root
--lib
---lambda-Stack
----index.ts
----lambdaOne.ts
----lambdaTwo.ts
--package.json
--package-lock.json
我参考package-lock.json文件添加了depsLockFilePath
,但我不确定这是否有必要。 (文档)