当前位置: 首页 > news >正文

深入 cdk-constructs 构建原理:jsii 多语言支持与 cdkdx 打包完整流程

深入 cdk-constructs 构建原理:jsii 多语言支持与 cdkdx 打包完整流程

【免费下载链接】cdk-constructsA collection of higher-level reusable cdk constructs项目地址: https://gitcode.com/gh_mirrors/cd/cdk-constructs

cdk-constructs 是一个由 26 个高级可复用 CDK 构造(Construct)组成的 Lerna 单仓库项目:源码全部用 TypeScript 编写,通过jsii编译出多语言支持(Python 等),再用cdkdx工具链一键完成构建、测试、打包与发布,最终同时分发到 npm 和 PyPI。本文面向新手,用最少代码带你走通这套「一份源码、多语言发布」的完整构建流程。

项目一览:Lerna 单仓库管理 26 个 Construct

项目根目录用 lerna.json 声明了仓库结构:

  • useWorkspaces: true+ package.json 中的workspaces同时纳管packages/*(26 个库)与examples/*(21 个示例应用);
  • version: "independent":每个包独立版本号,互不牵连;
  • publish.allowBranch: "master":只允许从 master 分支发布,保证产物可追溯;
  • ignoreChanges忽略__tests____fixtures__的变更,测试代码改动不会触发发版。

仓库内置的构造覆盖静态网站、WordPress 部署、CodePipeline 的 Slack 审批、S3 杀毒扫描等高频场景。以cdk-codepipeline-slack为例,它把 CodePipeline 状态变化渲染成 Slack 交互卡片:

配置审批所需的 OAuth 权限时,构造会引导你按下方界面勾选作用域:

jsii 多语言支持:一份 TypeScript 如何变成 Python 包

打开任意一个包的 package.json,都能找到同构的jsii配置块,它是多语言支持的核心:

"jsii": { "outdir": "dist", "tsc": { "outDir": "lib", "rootDir": "src" }, "excludeTypescript": ["src/lambdas", "src/**/__tests__"], "targets": { "python": { "distName": "cloudcomponents.cdk-deletable-bucket", "module": "cloudcomponents.cdk_deletable_bucket" } } }

各字段的作用一览:

配置含义
outdir: distjsii-pacmak 生成的各语言产物(含 Python wheel)输出目录
tsc.outDir: lib编译后的 JS 与类型声明输出到lib/
excludeTypescriptLambda 函数源码和测试不参与 jsii 编译
targets.python声明 Python 发布名,包名与模块名一一对应

jsii 编译时会把整个包编译成一份.jsii程序集文件(JSON 格式的元数据),记录类、方法、属性、类型签名。files: ["lib", ".jsii"]表明这份程序集随包一起发布到 npm——Python 用户pip install后,jsii 运行时就能据此动态生成 Python API,实现「TypeScript 一次编写、多语言调用」。

配合两个细节:externals: ["aws-sdk"]将 AWS SDK 标记为外部依赖(它本身非 jsii 兼容),dependenciespeerDependencies成对声明同一批@aws-cdk/*依赖——这是 jsii 的硬性要求,保证各语言安装时版本一致。

cdkdx 打包流程:build → test → package → release

每个包的scripts都把活交给 cdkdx 这个构建工具(它封装了 jsii、jsii-pacmak、jest、eslint、docgen):

cdkdx build # tsc 编译 + jsii 检查 + 生成 .jsii cdkdx test # jest 单测 + 快照测试 cdkdx lint # eslint 代码规范检查 cdkdx package # jsii-pacmak 生成 Python 等语言产物到 dist/ cdkdx docgen # 从 .jsii 程序集生成 API.md 参考文档 cdkdx release npm / pypi # 分别发布到 npm 与 PyPI

在仓库根目录 package.json 中,这些脚本通过lerna run ... --scope @cloudcomponents/*对所有包批量执行:

yarn bootstrap # lerna bootstrap,安装全部工作区依赖 yarn build # 26 个包依次执行 cdkdx build yarn test # cdkdx test 全量测试 yarn package # 生成各语言产物 yarn release:npm # 发布到 npm yarn release:pypi# 发布到 PyPI

产物与源码的边界由 .gitignore 清晰划分:lib/dist/.jsiitsconfig.json全部是构建产物,不入库。构建还会顺带生成 API.md 这类参考文档,以及lambda-file-sizes.json——后者由 cdkdx 持续监控 Lambda 打包体积,防止冷启动退化。

最终效果:Python 项目里pip install cloudcomponents.cdk-static-website,TypeScript 项目里npm install @cloudcomponents/cdk-static-website,同一份代码两种用法:

新手上手:最快体验步骤

  1. 克隆仓库:
git clone https://link.gitcode.com/i/3bd881e7649afa37c6fd4879a95283ad
  1. 根目录执行yarn && yarn bootstrap安装依赖;
  2. yarn build全量构建,yarn test查看 26 个包的快照测试;
  3. 打开 examples/static-website-example,它的 cdk.json 用cdkdx node src/static-website-app.ts启动应用,可参考其 static-website-stack.ts 学习构造的实际用法。

小结

cdk-constructs 的构建体系可以浓缩为一条链路:Lerna 管仓库 → jsii 定义多语言 ABI → cdkdx 串起编译/测试/打包/文档 → npm 与 PyPI 双渠道发布。理解了这套流程,你也能用同样的方式,把自己团队的 CDK 构造发布成多语言共享库。

【免费下载链接】cdk-constructsA collection of higher-level reusable cdk constructs项目地址: https://gitcode.com/gh_mirrors/cd/cdk-constructs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4189698.html

相关文章:

  • smallpath Blog图片优化流水线:七牛上传+WebP自动转换,省流量只需3行配置
  • 不止于JS导入:用responsive-loader查询参数打造CSS响应式背景图
  • synology-spk-repo.json是怎么生成的?homebridge-syno-spk官方SPK源工作原理与开源贡献指南
  • Minimus云存储揭秘:Firestore天气应用按用户隔离城市列表的完整教程
  • 美赛D题深度复盘:如何将团队合作量化建模与策略优化
  • 美赛B题建模实战:从沙堡持久性问题看交叉学科建模心法
  • C++函数模板深度解析:从泛型编程原理到工程实践避坑指南
  • SDC命令详解:使用set_max_transition命令进行约束
  • AI代码助手静默语义失败:成因剖析与防御实践指南
  • DeepResearch-9K:AI智能体深度研究能力的标准化评估基准
  • htop 主题定制:改 3 个开关,默认界面一眼看清谁在吃 CPU
  • AI编码代理的“自信且错误”陷阱:静默语义失败与防御策略
  • TranAD对比8大基线模型:LSTM_AD、OmniAnomaly、USAD、GDN等异常检测算法实测分析
  • 应广PMS132B单片机入门:从寄存器操作到点灯实战
  • Web智能体安全新范式:基于推理驱动的提示词注入防御实践
  • AI编码智能体如何作为测试套件审计员,发现传统测试遗漏的缺陷
  • 盘点编程题库
  • 智能体化数据系统:如何弥合语义鸿沟,避免分析工作流落地失败?
  • STM32标准库开发入门:从零搭建工程到点亮LED实战指南
  • 为什么 playground-elements 默认把沙箱放在 unpkg.com?读懂 4 条关键安全规则
  • 原生PHP网站如何实现QQ登录?
  • ATANT v1.1基准测试:系统化评估大模型记忆与长上下文能力
  • 解释一下Cookie和Session的区别及其应用场景。
  • 【学习篇】C语言数组填充值规则
  • Chrome与Edge技巧与扩展
  • CentOS/Ubuntu服务器等保整改实战:从安全基线到合规落地
  • 基于RK3588的边缘AI实战:从芯片解析到智慧场景全链路部署
  • VSCode+CMake中文乱码终极解决方案:从原理到实战
  • 深入解析C++ Vector:从动态数组到高性能容器的核心原理与实践
  • 基于OpenClaw与GLM 5.1构建免费AI Agent:本地部署与实战指南