关于 capacitor-plugin-upgrade-v5-to-v6
用于将 Capacitor 插件库从 v5 迁移到 v6 的技能,涵盖依赖和原生代码修改、监听器类型调整及可选的 SPM 支持。
主要功能
- 01项目快照与版本检查
- 02自动迁移命令
- 03监听器类型与 iOS 更新
- 04可选 SPM 迁移指南
- 05构建和迁移验证
适用场景
- 01让 v5 插件适配 Capacitor 6 应用
- 02更新 addListener 声明和实现
- 03在迁移至 v6 时添加 SPM 支持
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cap-go/ capgo-skills --skill capacitor-plugin-upgrade-v5-to-v6安装后在 Claude Code 中输入/capacitor-plugin-upgrade-v5-to-v6确认已加载。
附带文件metadata.jsonreferences/android.md
详细介绍
Capacitor 插件从 v5 升级到 v6
将插件库升级到 Capacitor 6。权威信息来源:https://capacitorjs.com/docs/updating/plugins/6-0
适用场景
- 快照显示
@capacitor/core为 5.x,且插件必须能在 Capacitor 6 应用中正常运行。 definitions.ts仍声明Promise<PluginListenerHandle> & PluginListenerHandle。- 用户希望在升级到 6 的同时添加 SPM 支持。
请勿用于:
- 升级应用 →
capacitor-app-upgrade-v5-to-v6。 - 插件使用 4.x → 请先使用
capacitor-plugin-upgrade-v4-to-v5;使用 6.x → 使用capacitor-plugin-upgrade-v6-to-v7。跨多个版本升级 →capacitor-plugin-upgrades。 - 完整的 SPM 转换说明 →
capacitor-plugin-spm-support。
当前项目快照
插件和 Capacitor 包快照:
!node -e "const fs=require('fs');if(!fs.existsSync('package.json'))process.exit(0);const pkg=JSON.parse(fs.readFileSync('package.json','utf8'));const out=['package.name='+(pkg.name||''),'package.version='+(pkg.version||'')];for(const section of ['peerDependencies','dependencies','devDependencies']){for(const [name,version] of Object.entries(pkg[section]||{})){if(name.startsWith('@capacitor/'))out.push(section+'.'+name+'='+version)}}console.log(out.join('\n'))"
示例和原生项目路径:
!find . -maxdepth 3 \( -path './example-app' -o -path './ios' -o -path './android' \)
参考资料
| 文件 | 加载时机 |
|---|---|
references/android.md | 手动应用 Gradle 或 Kotlin 更改时 |
升级前检查
| 工具 | 最低版本 |
|---|---|
| Node.js | 18+ |
| Xcode | 15.0+ |
| Java | 17 |
| AGP / Gradle | 8.2.1 / 8.2.1 |
| Android SDK 默认值 | compileSdk 34,targetSdk 34,minSdk 22 |
| iOS 部署目标 | 13.0(不变) |
操作步骤
-
确认版本为 5.x 且工作树干净。
-
在插件根目录执行:
npx @capacitor/plugin-migration-v5-to-v6@latest检查
git diff。 -
手动完成(
references/android.md):将开发依赖更新为latest-6,将 peer@capacitor/core更新为^6.0.0,将compileSdk(不是compileSdkVersion)默认值设为 34,将targetSdkVersion默认值设为 34,将 AGP 更新为 8.2.1,将 Gradle 更新为 8.2.1,将 Kotlin 更新为 1.9.10。 -
definitions.ts:每个
addListener重载都必须只返回Promise<PluginListenerHandle>:addListener( eventName: 'resume', listenerFunc: () => void, - ): Promise<PluginListenerHandle> & PluginListenerHandle; + ): Promise<PluginListenerHandle>;同步更新
web.ts和 README/docgen 输出。对于使用同步句柄的使用者而言,这是一个破坏性变更。 -
iOS:从插件
.m文件中删除CAP_PLUGIN_METHOD(removeAllListeners, CAPPluginReturnPromise);。现在所有插件都内置此方法。 -
可选 SPM:Capacitor 6 添加了实验性的 SPM 支持。询问用户是否要现在添加;如果要,请遵循
capacitor-plugin-spm-support(添加Package.swift,并在 Swift 中遵循CAPBridgedPlugin)。 -
使用
capacitor-app-upgrade-v5-to-v6升级示例应用,将插件主版本号递增,并注明“需要 Capacitor 6”。
验证
grep -n "\"@capacitor/" package.json # 6.x
grep -rn "& PluginListenerHandle" src/ # expect none
grep -rn "removeAllListeners" ios/ --include=*.m 2>/dev/null # expect none
grep -n "compileSdkVersion project\|gradle:8.2.1" android/build.gradle # compileSdk + 8.2.1
grep -n "distributionUrl" android/gradle/wrapper/gradle-wrapper.properties # gradle-8.2.1
npm run build
npm run verify # if the repo has the template verify scripts
在两个平台上运行示例应用;逐一添加和移除每个监听器。
错误处理
| 错误 | 修复方法 |
|---|---|
示例/测试中 TS 报错:Property 'remove' does not exist on type 'Promise<PluginListenerHandle>' | 对 addListener 调用使用 await。 |
AGP 针对 compileSdkVersion 发出弃用警告 | 使用 compileSdk。 |
.m 文件中仍列出 removeAllListeners | 删除 CAP_PLUGIN_METHOD 行(步骤 5);此方法已内置。 |
示例应用因 @capacitor/core 出现 ERESOLVE | peer 版本范围仍为 ^5;将其设为 ^6.0.0。 |