关于 converting-minikit-to-farcaster
面向将应用从 MiniKit 迁移到 Farcaster SDK 的开发者,提供钩子到 SDK 操作的对应关系、升级注意事项和转换步骤。还列出上下文异步访问及常见错误的处理方式。
主要功能
- 01MiniKit 钩子与 SDK 操作映射
- 02SDK v0.2.0+ 变更说明
- 03上下文异步访问示例
- 04迁移步骤与依赖更新指引
- 05常见错误排查
适用场景
- 01将 MiniKit 应用迁移到 Farcaster SDK
- 02更新 SDK 后调整上下文访问
- 03排查迁移中的类型或组件问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ base/ skills --skill converting-minikit-to-farcaster安装后在 Claude Code 中输入/converting-minikit-to-farcaster确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AUTH.mdDEPENDENCIES.mdEXAMPLES.mdLICENSEMANIFEST.mdMAPPING.mdPITFALLS.mdPROVIDER.mdREADME.mdanalyze_project.pyvalidate_conversion.py详细介绍
MiniKit 到 Farcaster SDK
重大变更(SDK v0.2.0+)
sdk.context是一个 Promise — 必须等待sdk.isInMiniApp()不接受参数sdk.actions.setPrimaryButton()没有 onClick 回调
检查版本:npm list @farcaster/miniapp-sdk
快速参考
| MiniKit | Farcaster SDK | 说明 |
|---|---|---|
useMiniKit().setFrameReady() | await sdk.actions.ready() | |
useMiniKit().context | await sdk.context | 异步 |
useMiniKit().isSDKLoaded | await sdk.isInMiniApp() | 无参数 |
useClose() | await sdk.actions.close() | |
useOpenUrl(url) | await sdk.actions.openUrl(url) | |
useViewProfile(fid) | await sdk.actions.viewProfile({ fid }) | |
useViewCast(hash) | await sdk.actions.viewCast({ hash }) | |
useComposeCast() | await sdk.actions.composeCast({ text, embeds }) | |
useAddFrame() | await sdk.actions.addMiniApp() | |
usePrimaryButton(opts, cb) | await sdk.actions.setPrimaryButton(opts) | 无回调 |
useAuthenticate() | sdk.quickAuth.getToken() | 参见 AUTH.md |
上下文访问模式
// WRONG
const fid = sdk.context?.user?.fid;
// CORRECT
const context = await sdk.context;
const fid = context?.user?.fid;
在 React 组件中,使用状态:
const [context, setContext] = useState(null);
useEffect(() => {
const load = async () => {
const ctx = await sdk.context;
setContext(ctx);
};
load();
}, []);
转换工作流
- 确认 Node.js >= 22.11.0
- 更新依赖项 — 参见 DEPENDENCIES.md
- 替换导入:
@coinbase/onchainkit/minikit→@farcaster/miniapp-sdk - 使用上方参考内容转换钩子
- 添加 FrameProvider — 参见 PROVIDER.md
- 更新清单:
frame→miniapp— 参见 MANIFEST.md
常见错误
“Property 'user' does not exist on type 'Promise'”
→ 访问属性前等待 sdk.context
“Expected 0 arguments, but got 1”
→ 从 sdk.isInMiniApp() 中移除参数
组件中的上下文为 null → 确保 FrameProvider 位于你的 Provider 链中
参考资料
- MAPPING.md — 完整的逐钩子转换参考
- EXAMPLES.md — 转换前后的代码示例
- PROVIDER.md — 使用 FrameProvider 配置 Provider
- PITFALLS.md — 常见错误及解决方案
- DEPENDENCIES.md — 软件包更新
- AUTH.md — Quick Auth 迁移
- MANIFEST.md — farcaster.json 变更
评论
支持 Markdown