用途:将 Kibana 内部 UI 组件转换为可独立分发的版本化包,供外部消费者(如 Cloud UI)使用。每个包位于 src/platform/kbn-ui/ 下,分为源码层(package.json、kibana.jsonc、src/、index.ts)与打包层(packaging/,通过 webpack 打成独立 .tgz)。参考实现为 src/platform/kbn-ui/side-navigation/。
主要能力与流程:
- 收集输入:sourcePath、folderName、description;packageName 自动派生为 @kbn/ui-{folderName}。
- 分析源码:读取 package.json、kibana.jsonc、index.ts,用 grep 找出所有 @kbn/* 导入,按 peerDependencies 分为 externalize 或 stub,并统计需更新导入的 Kibana 文件数。
- 确认后执行:git mv 迁移包并规范源码目录为 src/;重写 workspace package.json;更新 kibana.jsonc 的 id;创建 packaging/ 脚手架(package.json、webpack.config.js、tsconfig.json、scripts/build.sh、react/index.tsx、types.ts、type_validation.ts);创建 packaging/example/ 可运行示例;为 @kbn/* 生成 no-op 服务桩;批量替换全仓静态与动态导入及 tsconfig 的 kbn_references;校验旧路径已移除。
适用场景:需要把 Kibana 组件发布给非 Kibana 应用消费时。
限制:需人工复核 types.ts 中 EUI/复杂类型的简化、生成的桩是否安全,并在消费者应用中测试 .tgz 后再合并。具体命令与模板以资料为准。