anarlog 仓库新增 Tauri 插件全流程指南:add-plugin Skill 的脚手架与集成规范
2026/9/16 11:50:43 网站建设 项目流程

anarlog 仓库新增 Tauri 插件全流程指南:add-plugin Skill 的脚手架与集成规范

【免费下载链接】anarlogOpen source Granola AI Alternative项目地址: https://gitcode.com/GitHub_Trending/hy/anarlog

导读

本文面向需要在 anarlog 开源仓库中新增 Tauri 插件的开发者,完整梳理.agents/skills/add-plugin/SKILL.md中定义的插件生成、代码规约与仓库集成流程:从@tauri-apps/cli plugin new脚手架开始,到以plugins/analytics为范本整理目录结构与依赖,再到通过 specta 生成 TypeScript 绑定,最后完成 Cargo 工作区、桌面端 Tauri 工程与能力(capabilities)声明的四处集成。读完本文,你将能够按仓库统一规范新增一个可被apps/desktop前端直接调用的 Tauri 插件,并理解每一步背后的实现依据。

一、技能定位:何时使用 add-plugin

.agents/skills/add-plugin/SKILL.md在 frontmatter 中明确将自身定位为internal: true的内部技能,适用于两类场景:

  • 当需求是"在plugins/目录下新增或创建插件"时,使用该技能完成插件生成与仓库集成;
  • 当需求是"把一份刚生成的插件接入项目既有约定"时,同样适用。

反之,如果需求是修改已有插件(例如为plugins/analytics增加新的事件命令),则不应使用本技能,说明仓库对"脚手架生成"与"存量维护"做了明确的责任切分,避免生成器覆盖手工改动。

二、脚手架生成:一条命令产出插件骨架

技能给出的生成命令(无需手写任何 boilerplate):

npx @tauri-apps/cli plugin new NAME \ --no-example \ --directory ./plugins/NAME

其中NAME由 Agent 根据用户请求决定(如analyticsfs-sync),生成器会把它写入 crate 名、npm 包名与源码模块中。--no-example跳过示例应用,--directory ./plugins/NAME把插件直接生成到仓库统一的plugins/目录下。

生成后插件应立即能通过仓库根 Cargo.toml 中的 workspace 依赖(例如tauri-plugin-analytics = { path = "plugins/analytics" })被引用——这正是第 5 节集成步骤之一。

三、以 plugins/analytics 为范本的代码规约

技能要求"Follow the style and conventions used inplugins/analytics",生成后需做四项清理/调整:

操作说明
删除生成的rollup.config.js本项目不采用 rollup 打包前端绑定
删除生成的README.md插件说明统一由仓库文档体系承载
更新tsconfig.json改为继承仓库基础配置并限定js/目录
更新package.json对齐@anlg/plugin-<NAME>命名与 codegen 脚本

plugins/analytics为参照,整理后的形态是:

  • package.json"name": "@anlg/plugin-analytics""private": true"main": "./js/index.ts",脚本"codegen": "cargo test -p tauri-plugin-analytics""typecheck": "tsc --noEmit",依赖仅@tauri-apps/api(见 plugins/analytics/package.json);
  • tsconfig.jsonextends "../tsconfig.base.json"include: ["./js/*.ts"](见 plugins/analytics/tsconfig.json),与仓库根 tsconfig.base.json 对齐;
  • Rust 侧标准布局:src/lib.rssrc/commands.rs#[tauri::command]+#[specta::specta]命令)、src/ext.rs(Rust 扩展 trait)、src/error.rssrc/permissions能力描述目录与js/TypeScript 绑定目录。

默认保留 ping 函数

技能特别强调:除非用户要求不同的命令行为,否则应在ext.rscommands.rs中同时保留生成器产出的单个ping命令。这一约定保证新插件开箱即用(前端可直接调用ping验证插件注入成功),后续再按需增补业务命令,与plugins/analyticseventidentifyset_properties等命令同构演进。

四、生成 TypeScript 绑定:codegen 流程

代码落位后,执行绑定生成:

pnpm -F @anlg/plugin-<NAME> codegen

-F @anlg/plugin-<NAME>指定 pnpm workspace 过滤目标。该脚本最终执行cargo test -p tauri-plugin-<NAME>,其原理可从 plugins/analytics/src/lib.rs 的export_types测试看出:make_specta_builder收集commands::eventcommands::set_disabled等全部命令,通过tauri_specta::Builder::export配合specta_typescript的 prettier formatter 输出到./js/bindings.gen.ts,并自动写入// @ts-nocheck头。apps/desktop侧则通过import { commands } from "@anlg/plugin-analytics"直接使用这些绑定(见 apps/desktop/src/analytics.ts 与 apps/desktop/src/auth/auth-analytics.ts)。

因此 codegen 本质是"以测试驱动的方式导出类型",新增命令后重跑该脚本即可让前端类型与 Rust 端保持一致。

五、四处集成点:把插件接入桌面端

技能列出的集成点共四处,缺一不可:

集成点作用analytics 实例
根 Cargo.toml声明插件 crate 为 workspace 依赖tauri-plugin-analytics = { path = "plugins/analytics" }
apps/desktop/src-tauri/Cargo.toml让桌面端可链接该插件tauri-plugin-analytics = { workspace = true }
apps/desktop/package.json让前端可 import 绑定包"@anlg/plugin-analytics": "workspace:*"
apps/desktop/src-tauri/capabilities/default.json为主窗口授予插件权限"analytics:default"

能力声明:Tauri 2 权限模型的关键一环

最后一步常被忽略却至关重要:Tauri 2 的命令调用受 capabilities 权限约束,未在default.jsonpermissions数组中声明analytics:default(即plugins/analytics/permissions/default.tomlautogenerated/commands/*.toml定义的能力集合),前端调用会被拒绝。新插件需在 apps/desktop/src-tauri/capabilities/default.json 追加形如"<NAME>:default"的条目,并同步维护plugins/<NAME>/permissions/下的能力定义。

六、收尾:依赖安装与验证

完成apps/desktop/package.json更新后,必须执行:

pnpm i

以更新 pnpm-lock 并链接新 workspace 包。随后可依次验证:pnpm -F @anlg/plugin-<NAME> codegen生成绑定、pnpm -F @anlg/plugin-<NAME> typecheck通过类型检查、cargo check -p tauri-plugin-<NAME>通过编译,以及plugins/analyticstest_analyticsfire_and_forget_admission_is_bounded这类 Rust 单测(见 plugins/analytics/src/lib.rs)在桌面端mock_builder环境下验证插件生命周期与状态管理的范式。

七、快速核对清单

.agents/skills/add-plugin/SKILL.md收尾时,逐项确认:

  • npx @tauri-apps/cli plugin new <NAME> --no-example --directory ./plugins/<NAME>已执行;
  • 已删除生成的rollup.config.jsREADME.md
  • tsconfig.json继承../tsconfig.base.json且只包含js/
  • package.json命名为@anlg/plugin-<NAME>,含codegen/typecheck脚本;
  • ext.rscommands.rs保留默认ping命令;
  • pnpm -F @anlg/plugin-<NAME> codegen已生成js/bindings.gen.ts
  • Cargo.tomlapps/desktop/src-tauri/Cargo.tomlapps/desktop/package.jsonapps/desktop/src-tauri/capabilities/default.json四处已更新;
  • 更新apps/desktop/package.json后已执行pnpm i

【免费下载链接】anarlogOpen source Granola AI Alternative项目地址: https://gitcode.com/GitHub_Trending/hy/anarlog

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询