缓存、导出和数据库放在用户数据目录。
开发时,缓存、导出和数据库写在插件仓库里。打成 zip 装进 Dex Buddy 之后,不要再写安装目录。那个目录只放代码,覆盖安装会整份换成新包,写在里面的文件会一起被换掉。
Dex Buddy 在 ctx.dirs 上给出两个目录。密钥和选项仍然走设置页,见 设置,不要把它们放进这些目录。
开发时
从插件页「加载本地目录」挂进来之后,ctx.dirs.data 就是插件仓库,ctx.dirs.cache 是仓库里的 cache/。继续写仓库里的目录:
my-tool/
├── cache/ 删掉可以重建的缓存
├── output/ 导出。写在 ctx.dirs.data 下面
└── app.db 数据库,文件名自定仓库里已有 .venv 或 node_modules 时,Dex Buddy 直接用它们,不另建 plugin-runtime。开发环境要作者自己建、自己装。宿主不创建虚拟环境,也不按 requirements.txt 安装。改了依赖文件也不会更新这份 .venv。声明了 Python 但没有 .venv 时,插件不执行 apply,插件页显示「开发目录里没有 .venv」。可以重试,重试不会替你建 .venv。声明了 Node 但没有 node_modules 时同样,错误是「开发目录里没有 node_modules」,作者自己在仓库里 npm ci。
本地实例的设置写在 plugin-settings.json 的实例 id 下,不写进清单 id。因此测试用的密钥不会覆盖已经安装的正式插件。移除本地实例只删实例 id 这一段,以及 plugin-data/<实例 id>/、plugin-runtime/<实例 id>/。清单 id 那一段和 plugin-data/<清单 id>/ 不动,源码目录也不删。
「按发布预览」会把与插件中心相同的文件复制到用户数据里该实例自己的目录,依赖装进 plugin-runtime/<实例 id>/,数据目录改到 plugin-data/<实例 id>/。预览仍然读这份实例已有的设置,不读不写清单 id。结束预览后回到仓库目录,设置还在。
安装之后
代码落在 userData/installed_plugins/<插件 id>/。这个目录只放源码,覆盖安装会整份换成新包。
userData/
├── runtimes/ 全机共用的 uv、Python、官方 Node
├── installed_plugins/<插件 id>/ 源码
├── plugin-runtime/<插件 id>/
│ ├── env/ 这个插件的虚拟环境或 node_modules
│ └── cache/ ctx.dirs.cache
└── plugin-data/<插件 id>/ ctx.dirs.data
├── output/
└── app.dbuserData 是 Electron 的 app.getPath('userData')。不要自己拼这三条路径,用 ctx.dirs。不要把缓存写进 plugin-data。
页面没有 Node,不能自己写文件。需要落盘时,由页面调用 window.dex.call,在 index.js 里写。见 运行。
子进程要写这些目录时,把 ctx.dirs 里的绝对路径当参数传进去。
更新和卸载
覆盖安装只替换 installed_plugins/<插件 id>/,不会先卸载。plugin-data 留下。plugin-runtime/<id>/install.json 里的 uv、Python、Node 版本或依赖哈希变了,才重建 env/。Dex Buddy 升级若改了这三个版本常量,已安装的环境会重建。锁没变、版本也没变,才跳过。
卸载已安装的插件时,Dex Buddy 删掉安装目录、整个 plugin-runtime/<插件 id>/,并删掉 plugin-settings.json 里这一插件的配置。plugin-data/<插件 id>/ 和全机的 runtimes/ 留下。再次安装同一 id 时,导出和数据库还在,依赖按锁文件重装。
dispose 用来关掉进程、数据库连接,不要在里面删除 plugin-data 或 plugin-runtime。
打包
源码仓库里的 cache/、output/、temp/ 不要打进 zip。装好之后的缓存走 plugin-runtime,导出和数据库走 plugin-data。打包排除见 发布。