Skip to main content

cloud-charts-migration

Internal-to-open-source migration workflow for cloud-charts. Use when migrating packages from an internal npm registry (aisc-widgets / @alife/*) to public npm (@alicloud/*), sanitizing internal identifiers, aligning package.json metadata, and verifying zero regressions. Covers batch migration (B0-B6), G2 v4/v5 coexistence, rollup path resolution, storybook dual-config, and full-repo grep audit.

Informações da origem

Repositório
alibaba/cloud-charts
Última atividade na origem
4 de agosto de 2026 às 11:55
Idioma detectado do SKILL.md
chinês
Estrelas
513
Forks
75

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
cloud-charts-migration
description
Internal-to-open-source migration workflow for cloud-charts. Use when migrating packages from an internal npm registry (aisc-widgets / @alife/*) to public npm (@alicloud/*), sanitizing internal identifiers, aligning package.json metadata, and verifying zero regressions. Covers batch migration (B0-B6), G2 v4/v5 coexistence, rollup path resolution, storybook dual-config, and full-repo grep audit.
# cloud-charts 内网→开源迁移 SKILL 本 skill 记录从内网 `aisc-widgets`(`@alife/*`,gitlab + anpm)迁移到开源 `cloud-charts`(`@alicloud/*`,github + npmjs,MIT)的完整流程。 适用于后续新增包迁移、持续迭代、或同类内网→开源仓库迁移场景。 --- ## 1. 迁移架构总览 ``` 内网 aisc-widgets 开源 cloud-charts (@alife/*, anpm, gitlab) → (@alicloud/*, npmjs, github, MIT) ├── packages/core ──→ packages/core ├── packages/charts/* (23) ──→ packages/charts/* (23) ├── packages/frameworks/react ──→ packages/frameworks/react ├── packages/frameworks/solid ──→ packages/frameworks/solid ├── packages/compat ──→ packages/compat ├── packages/cli ──→ packages/cli ├── skills/ ──→ skills/ └── examples/* ──→ examples/* ``` ### 包名映射 | 内网包名 | 开源包名 | |---------|---------| | `@alicloud/cloud-charts-core` | `@alicloud/cloud-charts-core` | | `@alicloud/cloud-charts-{chart}` | `@alicloud/cloud-charts-{chart}` | | `@alicloud/cloud-charts` | `@alicloud/cloud-charts` | | `@alicloud/cloud-charts-compat` | `@alicloud/cloud-charts-compat` | | `@alicloud/cloud-charts-react` | `@alicloud/cloud-charts-react` | | `@alicloud/cloud-charts-solid` | `@alicloud/cloud-charts-solid` | | `@alicloud/cloud-charts-cli` | `@alicloud/cloud-charts-cli` | --- ## 2. 净化映射表 迁移时必须对同步过来的文件做以下文本替换(按优先级排序): | # | 匹配模式 | 替换为 | 说明 | |---|---------|-------|------| | 1 | `@alicloud/cloud-charts-core` | `@alicloud/cloud-charts-core` | core 包名 | | 2 | `@alicloud/cloud-charts-{chart}` | `@alicloud/cloud-charts-{chart}` | 单图表包名 | | 3 | `@alicloud/cloud-charts` | `@alicloud/cloud-charts` | 整包名 | | 4 | `@alicloud/cloud-charts-compat` | `@alicloud/cloud-charts-compat` | compat 包名 | | 5 | `@alicloud/cloud-charts-react` | `@alicloud/cloud-charts-react` | React 包名 | | 6 | `@alicloud/cloud-charts-solid` | `@alicloud/cloud-charts-solid` | Solid 包名 | | 7 | `@alicloud/cloud-charts-cli` | `@alicloud/cloud-charts-cli` | CLI 包名 | | 8 | `aisc-widgets` | `cloud-charts` | 仓库名/路径引用 | | 9 | `aisc-` (CSS 前缀) | `cc-` | CSS class/keyframe 标识符 | | 10 | `AISC` | `cloud-charts` | 品牌名(非 CSS) | | 11 | `anpm` | `npm` | 包管理器引用 | | 12 | `tnpm` | `npm` | 包管理器引用 | | 13 | `registry.npm.alibaba-inc.com` | `registry.npmjs.org` | npm registry URL | | 14 | `anpm.alibaba-inc.com` | `npmjs.org` | 内网域名 | | 15 | `*.alibaba-inc.com` URL | `(内部链接已移除)` | 内网文档链接 | | 16 | `O-Insight` / `o-insight` | `cloud-charts` | 内部项目代号 | | 17 | `@aisc/charts-*` | `@alicloud/cloud-charts-*` | 老 Angular 引用格式 | ### 净化白名单(保留不改) | 模式 | 原因 | |------|------| | `data-aisc-theme` | 老 SCSS 主题选择器白名单,运行时依赖 | | `@alicloud/cloud-charts-core`(CHANGELOG 历史记录) | 历史变更记录,不修改 | | `@alicloud/cloud-charts-{chart}`(CHANGELOG 历史记录) | 历史变更记录,不修改 | --- ## 3. 批次迁移流程 ### B0: core 基线收敛 1. **同步源码**:`rsync -av --delete` 从内网 repo 同步 `packages/core/src/` 2. **净化**:按映射表批量 sed 替换 3. **版本对齐**:`package.json` version → `alpha.4` 4. **导出补全**:确认 `src/index.ts` 导出 compat 所需的 `builtInThemeTokens` 5. **验收**:typecheck + build + vitest + storybook:v3 + grep 净化 + 老 src/ 零改动 ### B1-a/b/c: 23 个图表包迁移 每批 7-8 个包,统一流程: 1. **rsync 同步**:`packages/charts/{wxxx}/` 全量同步 2. **sed 净化**:按映射表替换包名、import 路径、CSS 前缀 3. **package.json 对齐**:version → alpha.4、license → MIT、publishConfig → npmjs.org 4. **rollup.config.mjs 路径**:确认 `createRequire(resolve(__dirname, '../../../examples/cloud-charts-wline-vanilla-demo/node_modules/.package-lock.json'))` 路径正确 5. **stories-v3 生成**:创建 `{chart}.stories.jsx`,使用 `CompareTwoCols` 双列对比模式 6. **.storybook-v3/main.js**:添加 alias `@alicloud/cloud-charts-{chart}$` → `packages/charts/{wxxx}/src/index.ts` 7. **验收**:typecheck + build + storybook:v3 构建 exit:0 ### B2: React 整包 + react-demo 1. **rsync 同步**:`packages/frameworks/react/` 全量同步(60 文件) 2. **sed 净化**:`aisc-widgets` → `cloud-charts`、`aisc-` → `cc-`、`AISC` → `cloud-charts` 3. **typecheck 修复**: - `Wplaceholder` props 不接受 `state` → 改为 `empty` - 其他属性不匹配问题 4. **react-demo 同步**:examples 中的 react demo 同步 + 净化 + vite build ### B3: compat + 整包 2.0.0 1. **compat 同步**:28 文件 rsync + 净化 2. **typecheck 修复**:`builtInThemeTokens` 未从 core 主入口导出 → 在 `core/src/index.ts` 添加 re-export 3. **版本切换**:根 `package.json` version → `2.0.0` 4. **老 stories 回归**:老 storybook 构建 + 老 src/ typecheck 零错误 ### B4: 发布准备 1. **审计**:检查所有 package.json 的 publishConfig、license、version 一致性 2. **批量修复**:node 脚本统一 24 个包(version → alpha.4、license → MIT、publishConfig → npmjs.org) 3. **全仓 grep**:确认 `@aisc/`、`aisc-widgets`、`anpm`、`@alife/`(非 CHANGELOG)零残留 4. **根 package.json**:version → 2.0.0、publishConfig → npmjs.org、license → MIT ### B5: Solid + CLI/skills + Angular demo 1. **Solid 同步**:37 文件 + package.json 对齐 + typecheck + build 2. **CLI 同步**:571 文件 + vendor 目录 `aisc-` → `cc-` 替换 3. **skills 同步**:261 文件净化 4. **Angular demo 同步**:2 个 demo + 选择器/组件名替换 5. **.gitignore 补全**:`.angular/`、`examples/*/dist/`、`packages/charts/*/dist/`、`skills/*-workspace/` ### B6: SKILL 沉淀 本文档即为 B6 产物。 --- ## 4. 关键技术决策 ### 4.1 G2 v4/v5 共存 - 老 `src/` 使用 `@antv/g2@^4.2.9`(链式 API) - 新 `packages/core` 使用 `@antv/g2@~5.4.8`(Spec Mode) - npm workspaces hoisting 后两者不冲突:根 `node_modules/@antv/g2` = v4,`packages/core/node_modules/@antv/g2` = v5 - storybook alias `@antv/g2$` → G2 v5 UMD bundle ### 4.2 rollup 工具链路径 所有子包的 `rollup.config.mjs` 通过 `createRequire` 从 `examples/cloud-charts-wline-vanilla-demo/node_modules/` 解析 rollup 插件。需要: 1. vanilla-demo 目录名必须包含 `wline-vanilla-demo`(或创建符号链接) 2. 缺失的 devDependencies 需安装到 vanilla-demo:`@rollup/plugin-babel`、`babel-preset-solid`、`solid-js` ### 4.3 整包内联策略 - 2.0.0 只发布 `@alicloud/cloud-charts`(整包) - 子包版本 `alpha.4` 独立发布,供按需加载用户使用 - compat 包提供 `<Wline>` 等 React 组件的无感升级路径 ### 4.4 stories-v3 对比模式 - `CompareTwoCols` 组件:左列 vanilla `renderWxxxModel`(v3 包),右列老 React `Wxxx` 组件(G2 v4) - 用于验证新架构与老组件的渲染一致性 - `.storybook-v3/main.js` 为全部 23 个图表包 + core + react 添加 webpack alias --- ## 5. 验收清单 每个批次完成后执行以下验证: | 检查项 | 命令 | 通过标准 | |-------|------|---------| | typecheck | `npx tsc --noEmit -p packages/core/tsconfig.json` | 0 errors | | build | `npm run build -w packages/{path}` | exit:0,dist/ 产出 | | storybook:v3 | `npm run storybook:v3 -- --smoke-test` | exit:0 | | grep 净化 | `grep -rn '@aisc/\|aisc-widgets\|anpm' --exclude-dir={node_modules,dist,.angular,build,es,lib,.history}` | 0 matches(CHANGELOG 历史记录除外) | | 老 src/ 回归 | `git status --short src/` | 零改动 | | 老 typecheck | `npx tsc --noEmit` | 0 errors | --- ## 6. 常见问题与解决方案 ### 6.1 node-sass 构建失败(Node 22/24 + arm64) **现象**:`npm rebuild node-sass` 失败,gyp v8.4.1 不兼容 Node 22+ **解决**:node-sass 9.0.0 已废弃,无法在新 Node 上构建。老链路回归降级为 typecheck 验证(老 src/ 零改动 + 零类型错误即可) ### 6.2 Wplaceholder props 不匹配 **现象**:`Property 'state' does not exist on type 'WplaceholderProps'` **根因**:`Wlistcontainer` 使用 `<Wplaceholder state="empty" />`,但 `Wplaceholder` 的 props 定义是 `empty?: boolean` **解决**:改为 `<Wplaceholder empty />` ### 6.3 builtInThemeTokens 未导出 **现象**:compat 包 typecheck 报 `Module '"@alicloud/cloud-charts-core"' has no exported member 'builtInThemeTokens'` **根因**:core 的 `runtime/theme/index.ts` 有 `builtInThemeTokens` 但主入口 `src/index.ts` 未 re-export **解决**:在 `core/src/index.ts` 的 theme 导出行添加 `builtInThemeTokens` ### 6.4 Solid build 缺失依赖 **现象**:`Cannot find module '@rollup/plugin-babel'` / `babel-preset-solid` **解决**:在 `examples/cloud-charts-wline-vanilla-demo` 安装缺失依赖: ```bash npm install @rollup/plugin-babel babel-preset-solid solid-js --save-dev --ignore-scripts ``` ### 6.5 rollup.config.mjs 路径不匹配 **现象**:rollup 配置引用 `wline-vanilla-demo` 但实际目录是 `cloud-charts-wline-vanilla-demo` **解决**:创建符号链接 `ln -sf cloud-charts-wline-vanilla-demo wline-vanilla-demo` ### 6.6 Angular demo sed 失败 **现象**:`sed -i '' ...` 报 "Operation not permitted" **根因**:沙箱权限限制 **解决**:改用 SearchReplace 工具(而非 sed 命令)修改文件 ### 6.7 Wsunburst 命名导出 vs default export **现象**:Wsunburst 在老 src/ 中是命名导出(非 default export) **解决**:stories-v3 中使用 `{ Wsunburst }` 而非 `Wsunburst` 默认导入 --- ## 7. 迁移后审计 ### 7.1 package.json 审计 每个包必须包含: - `name`: `@alicloud/cloud-charts-*` - `version`: `alpha.4`(子包)或 `2.0.0`(整包) - `license`: `MIT` - `publishConfig`: `{ "registry": "https://registry.npmjs.org", "access": "public" }` - `repository`: 指向 github.com/alibaba/cloud-charts ### 7.2 全仓 grep 审计 ```bash # 以下命令应返回 0 matches(CHANGELOG.md 历史记录除外) grep -rn '@aisc/' --exclude-dir={node_modules,dist,.angular,build,es,lib,.history} grep -rn 'aisc-widgets' --exclude-dir={node_modules,dist,.angular,build,es,lib,.history} grep -rn 'anpm' --exclude-dir={node_modules,dist,.angular,build,es,lib,.history} grep -rn 'alibaba-inc.com' --exclude-dir={node_modules,dist,.angular,build,es,lib,.history} ``` ### 7.3 .gitignore 审计 确保以下目录被忽略: - `packages/*/dist/`、`packages/charts/*/dist/`、`packages/frameworks/*/dist/` - `examples/*/dist/`、`examples/*/package-lock.json` - `.angular/` - `skills/*-workspace/` --- ## 8. 参考文件 - 迁移计划原文:`Plans/rustling-kindling-melody.md` - core 主入口:`packages/core/src/index.ts` - storybook v3 配置:`.storybook-v3/main.js` - stories-v3 模板:`stories-v3/bar.stories.jsx` - 根 package.json:`package.json`(version 2.0.0)
Ver no GitHub