如何在未部署对应堆栈时阻止BucketDeployment执行源码打包?
如何在未部署对应堆栈时阻止BucketDeployment执行源码打包?
我完全懂你的痛点——CDK默认会在synth阶段就触发Asset的打包操作,哪怕你根本不会部署包含这个BucketDeployment的堆栈,Angular打包本身又挺耗时的,平白浪费时间确实闹心。下面给你几个实用的解决思路:
方案一:通过上下文参数控制打包逻辑
你可以给CDK加个上下文开关,只有明确要部署这个堆栈时,才启用bundling流程。修改你的Asset配置如下:
const shouldDeployApp = app.node.tryGetContext('deploy-angular-app') === 'true'; new BucketDeployment(this, `AngularAppDeployment`, { destinationBucket: bucket, distribution: distro, sources: [ Source.asset('lib/web/app', { assetHashType: cdk.AssetHashType.OUTPUT, bundling: shouldDeployApp ? { image: cdk.DockerImage.fromRegistry("public.ecr.aws/docker/library/node:lts"), local: { tryBundle(outputDir) { try { execSync( `cd lib/web/app && npm run build:${props.stage} -- --output-path ${outputDir}`, { stdio: "inherit", } ); return true; } catch { return false; } }, } } : undefined, }) ] })
当你需要部署这个堆栈时,带上上下文参数执行命令:
cdk deploy YourAngularStack -c deploy-angular-app=true
如果只是synth其他堆栈,不带这个参数的话,bundling逻辑会直接跳过,不会触发Angular打包。
方案二:条件式创建BucketDeployment资源
如果某些场景下整个BucketDeployment都不需要存在,你可以直接通过条件判断来控制资源的创建:
const shouldDeployApp = app.node.tryGetContext('deploy-angular-app') === 'true'; if (shouldDeployApp) { new BucketDeployment(this, `AngularAppDeployment`, { destinationBucket: bucket, distribution: distro, sources: [ Source.asset('lib/web/app', { assetHashType: cdk.AssetHashType.OUTPUT, bundling: { image: cdk.DockerImage.fromRegistry("public.ecr.aws/docker/library/node:lts"), local: { tryBundle(outputDir) { try { execSync( `cd lib/web/app && npm run build:${props.stage} -- --output-path ${outputDir}`, { stdio: "inherit", } ); return true; } catch { return false; } }, } }, }) ] }); }
这种方式更彻底,当条件不满足时,整个BucketDeployment资源都不会被添加到堆栈中,自然也不会触发任何打包操作。
方案三:利用环境变量控制
如果你更习惯用环境变量来做配置开关,也可以这么写:
const shouldDeployApp = process.env.DEPLOY_ANGULAR_APP === 'true'; // 后续逻辑和上面一致,要么控制bundling,要么控制BucketDeployment的创建
部署时只需先设置环境变量再执行命令:
DEPLOY_ANGULAR_APP=true cdk deploy YourAngularStack
核心思路其实就是通过外部参数(上下文或环境变量)来控制打包逻辑或资源的创建,从而避免在不需要部署该堆栈时做无用功。
备注:内容来源于stack exchange,提问作者Chris Rice
相关产品推荐
相关产品推荐

