用途
该技能用于将 Qlik Sense 可视化扩展从旧版 Extension API / Capability APIs 迁移到 nebula.js。迁移产物是一个由 nebula sense 打包的 nebula.js 扩展,位于新项目文件夹中,原扩展不会被就地编辑。适用对象为声明 "type": "visualization" 的 .qext 可视化扩展(可含 AngularJS)。不适用于其他类型扩展(widget、自定义组件、主题)、使用 Capability API 嵌入内容的 mashup,以及 Qlik 自带图表。
主要能力
- 清点旧扩展:脚本 inventory.mjs 产出旧 API 使用、宿主依赖、AMD 依赖与资源的工作清单,按 direct / rewrite / host / review 分类。
- 并列搭建:用 nebula-id.mjs 在原 id 后加 -nebula 生成新 id,通过 npx @nebula.js/cli create 创建项目,再以 npm run sense 打包。
- 迁移属性、数据与面板:initialProperties 迁到 src/object-properties.js,dimensions/measures 的 min/max 迁到 src/data.js,definition 迁到 src/ext.js,并保留 Data 区段。
- 两阶段移植:阶段 1 借助 compat-shim.js 让旧渲染代码先跑通(仅适用于基于超立方体或 list object 且使用 $element 与 backendApi 的扩展);阶段 2 按参考资料逐块改为 nebula.js 惯用写法,并删除 shim 与 legacy-paint.js。
- 静态检查:check-no-host-apis.mjs 检查源码与打包产物中的宿主页面 API/框架;check-package.mjs 校验 nebula sense 输出;check-panel.mjs 检查数据目标与 Data 区段;check-compat.mjs 做可替换性静态检查。
- 生成 MIGRATION.md 迁移报告,汇总执行命令、映射/重写/丢弃内容、打包库、CSP 来源、是否重命名及宿主侧待办清单。
使用方式
用自然语言提出迁移请求,例如“把 ~/ext/ShowHide 的扩展迁移到 nebula.js”,并提供含 .qext 的旧扩展文件夹路径。随后按工作流执行:清点与计划、脚手架、迁移属性/数据/面板、阶段 1、阶段 2、打包与检查、可替换决策与重命名、报告。npx、npm install 及任何上传到租户的操作都需用户批准;技能不会自行上传、删除或替换租户上的扩展。运行时只通过用户项目中的 npm/npx 访问网络,脚本本身只读、无网络调用。
适用场景
需要把旧版 Qlik Sense 可视化扩展升级为 nebula.js 扩展,并希望在同一租户上并列对比新旧版本、最终在兼容前提下静默替换旧扩展的场景。
限制
脚本只做静态检查,不在 Sense 宿主中运行扩展,因此不能声称“可用”或“已验证”,只能表述为“静态检查未发现阻断性差异”;最终验证需用户在宿主中打开由旧扩展保存的图表。宿主测试需用户提供临时租户并逐项批准变更。AngularJS UI、qlik.table、仅客户端 API、QVisualization 导出、搜索辅助等无替代方案的功能,需在停止点由用户决定丢弃、重设计或保留旧扩展。迁移需 Node.js(测试时为 24 或更新版本,以 @nebula.js/cli 的 engines 为准)。扩展须自包含依赖与资源,运行时不从其他源加载脚本、样式、字体或数据;无法避免的外部来源需在报告中列出。不得在文件中放置令牌、含凭据的租户 URL 或个人数据。