Skip to content

打包与体积上限 ​

一个插件就是一个文件夹 + 一份 mod.json。打包 = 把整个文件夹压成 zip。


打包内容 ​

zip 的根目录必须直接是 mod.json(不能多套一层文件夹):

text
my_mod.zip
├── mod.json          ← 根目录
├── my_mod.py
├── locales/
├── icon.svg
└── *.qml

客户端自带的导出功能会按这个规则打包;手工打包时注意别把外层目录也压进去。


体积上限:20 MB(硬上限) ​

环节限制
客户端上传前预检20 MB(超了本地直接拦下,一个字节都不发)
服务端(Pages Function)20 MB

工坊跑在 Cloudflare Pages Function 上,45 MB 起的包会在上传中途被平台掐断 (客户端只会看到写失败,没有有用提示)——所以官方在 20 MB 就提前拦住。

大数据怎么办 ​

东西该怎么分发
模型权重(几百 MB ~ 几 GB)mod.json 的 model_artifacts → 宿主从 HF / ModelScope 下到用户数据目录。见 模型工件
原生运行库(.dll / .exe,几十 MB)requires_runtime → 宿主按需下载校验解压。见 宿主运行库
轻量 Python 依赖libs/ 或 vendor/ 随包携带(见 运行环境)
几十 MB 的自研二进制且官方没有对应运行库联系官方走单独分发(不要塞进 .tbmod)

实测教训:曾经有作者把 88 MB 的 llama 运行库打进包,上传必然失败。 现在的运行库组件就是为这个场景准备的。


版本号 ​

  • mod.json 的 version 必须是 x.y.z 语义化版本。
  • 发布到插件工坊时必填,且新版本必须大于线上最高版本(发布页里可以直接改)。
  • 客户端本地加载允许缺省(默认 1.0.0)。
  • version(自己的版本号)与 target_app_version(适配的客户端代次,必填 0.2)是两回事, 见 兼容与版本门禁。

打包前自检 ​

  • [ ] zip 根目录直接是 mod.json(不是 my_mod/mod.json)
  • [ ] mod.json 写了 "target_app_version": "0.2"(不写就装不上,见 兼容与版本门禁)
  • [ ] id 全局唯一,作者段不是保留名(transbox / official / builtin / community / example / workshop / steam / system / admin / root / support / web / test / tbmod)
  • [ ] version 是 x.y.z 且高于线上最高版本
  • [ ] entrypoint 指向的文件与类名真实存在
  • [ ] 包内没有 __pycache__ / .git / 临时文件
  • [ ] 合计体积 < 20 MB;没有大二进制/权重
  • [ ] locales/ 中英两份齐全(见 i18n)
  • [ ] 图标是矢量 SVG,不是 Emoji / 字符

相关 ​

TransBox - 赋能全人类无界限跨语言交流