@heybox/hb-sdk API Reference - v0.9.5
    正在准备搜索索引...

    函数 miniappManifest

    • 创建工坊小程序使用的 Vite 插件。

      返回 MiniappManifestPlugin

      可直接加入 Vite plugins 数组的 MiniappManifestPlugin。插件固定名为 heybox-miniapp-manifest,并提供 config、configResolved、configureServer、buildEnd、 transformIndexHtml、closeBundle hooks;这些 hooks 由 Vite 调用,应用代码不应手动调用。

      Error config 阶段发现 Vite base 不是 '' 或 './',或无法解析当前 SDK 版本时抛出。

      Error configResolved 阶段发现已解析插件列表中 miniappManifest() 数量不是一个时抛出。

      Error HTML 缺少 <head>,包含 meta refresh、<base>、禁止的 resource hint,或资源 URL 不符合小程序 HTML 策略时,transformIndexHtml / 生产产物复检抛出。

      Error 生产构建无法读取或解析最近的 package.json,version、heybox.platforms、 heybox.permissions、heybox.window、heybox.bindAppIds 或 heybox.companions 声明非法时抛出。

      Error 展示资料缺失、名称/图片路径非法、图片无法解码或不符合大小/尺寸约束,或类别非法时抛出。

      Error 生产 build.outDir 缺少根 index.html、递归发现额外 HTML,或 Companion 权限、 目标平台、来源目录、归档结构、入口二进制不符合约束时抛出;更早的 Rollup/Vite 错误会原样优先重抛。

      该函数必须从 @heybox/hb-sdk/vite 导入,在 vite.config.ts 中无参调用且只注册一次;它不是 iframe 业务代码 API,也没有 options 对象。小程序声明统一来自从 Vite root 向上找到的最近一个 package.json,插件只读取和规范化,不会改写源文件:

      • version:发布版本;trim 后必须是完整 SemVer,可含 prerelease,不允许 build metadata 或模板值 0.0.0;
      • heybox.name、heybox.icon、heybox.coverImages:SDK 0.8.2 起须完整提供的展示资料。 图片源路径相对项目目录;icon 为 200×200,封面 1–5 张,每张不超过 10 MiB / 4000 万像素。 build 会复制图片到输出目录 _hb/basic-info/,并将 Manifest 路径改为生成路径,不改写源图片;
      • heybox.category:tool、game 或 other;构建时允许缺省,发布预检要求提供;
      • heybox.desc:可选简介,最多 200 个字符,写入 manifest 后在小程序简介页展示;
      • heybox.platforms:项目实际承诺适配的非空、无重复平台 allowlist;输出按平台词表规范排序。 声明仍停留在旧模板移动端默认(android、ios、ohos)时,serve 与 build 都只输出 一条非阻断提示,不影响构建结果;
      • heybox.permissions:严格权限对象;未知权限/字段或错误类型会失败,enabled: false 项不写入 Manifest。旧版本缺失声明时可能警告,新硬切版本会失败;
      • heybox.window:可选的新 PC 开窗初值、最小尺寸和 resizable 声明;省略时不写该字段;
      • heybox.bindAppIds:可选的最多 20 个正 int32 字符串 App ID;校验、去重并按数值排序,空数组 在本地产物中等同不写;
      • heybox.companions:可选的受管桌面程序声明;source 相对上述 package.json 所在目录解析, 必须同时声明启用的 companion 权限和匹配的 Windows/macOS 目标平台。

      产物中的 sdkVersion 来自当前实际安装的 @heybox/hb-sdk,不是项目可配置字段。Vite options、页面 代码和普通环境变量不能覆盖上述 package 声明;插件也不会联网确认 App ID、平台批准或远端版本状态。

      Hook 行为如下:

      • config:省略 base 时补为 './',显式值只接受 '' / './';生产构建按 Chrome 64 / Safari 12 转换 Vite 编译脚本的 JavaScript 语法,保留更旧的自定义目标,拒绝 esbuild: false;注入 SDK 构建版本,且仅 vite serve 注入开发日志编译常量。语法转换不处理原样复制或远端加载的脚本,不包含运行时 API polyfill, 也不会更新已发布旧产物;
      • configResolved:确认插件唯一性,记录真实 root、build.outDir、serve|build 命令和精确 HMR WebSocket 地址,并再次确认生产环境的语法兼容目标;直接 vite build 使用该实际 outDir, hb-sdk build 则由 CLI 固定为 dist/;
      • configureServer:为 hb-sdk dev 注册设备日志、本地小程序 Manifest 与 Companion Manifest/ZIP 中间件;敏感路由只接受数值 loopback socket/Host、GET|HEAD 和 CLI 注入的独立短期令牌,快照在 配置重载时按 digest 保留,并在服务真正关闭时清理;
      • transformIndexHtml:校验 HTML URL/标签策略,注入 Runtime Gate;默认注入平台 CSP,serve 时 connect-src 只开放解析出的 HMR WebSocket,并额外注入调试日志 bootstrap;
      • buildEnd:记住更早的 Rollup/Vite 错误,避免 closeBundle 的二次产物错误遮盖根因;
      • closeBundle:serve 时直接完成;build 时复检最终 HTML,要求整个输出树只有根 index.html,再于 build.outDir 写入 manifest.json,并把 Companion 目录打包成 companions/<alias>/<target>.zip,记录 size、SHA-256、固定入口与 args。

      HTML 策略会隔离业务 script/modulepreload,直到父 Runtime Gate 以 namespace、版本、nonce、source 以及 referrer 可确定时的 origin 完成探测;失败时显示只能在小黑盒 App 内打开的安全页。策略拒绝自动跳转、<base>、危险 resource hints 和不受支持的外部 URL,并按标签只允许相对 URL、明确允许的 data: / blob: 或 小黑盒官方 HTTPS 资源。开发者自行提供的 CSP 会保留;插件管理的 CSP marker 可重复转换而不会叠加。

      平台 CSP 默认始终保留,直接 vite build / hb-sdk build 不会因项目声明 heybox.permissions.network.useOfficialDomain 而跳过。只有官方 hb-sdk dev 或 hb-sdk remote deploy 将当前版本的 network 声明与远端批准结果求交并确认最终启用后,才会 建立 verified 上下文供插件读取内部 HB_SDK_RUNTIME_PERMISSION_CONTEXT + HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN 组合跳过平台 CSP;单独设置 任一值无效。完全缺失权限声明的项目会直接拒绝构建;useOfficialDomain 不参与 CSP 跳过决定。Runtime Gate、HTML 校验和 Manifest 生成始终保留。

      HB_SDK_COMPANION_ARTIFACT_ACCESS_TOKEN、HB_SDK_MINI_PROGRAM_MANIFEST_ACCESS_TOKEN、 HB_SDK_SKIP_COMPANIONS 以及上述 CSP 上下文均是 CLI/发布链路内部开关,不是项目配置项。它们在 插件创建时捕获;开发服务配置重载只会从同一服务的内存快照恢复 CLI 令牌。业务代码和 Vite 配置 不应手工设置、读取、记录或转发令牌值。正式声明必须继续写在 package.json#heybox,内部环境变量 不能替代声明校验。

      manifest.json 是 release pipeline 元数据,不是部署后供页面 fetch 的 CDN 资源。发布链路使用 isValidVersion 复核版本、 resolveMiniappManifestPlatforms 解析平台硬切规则、 parseMiniappBindAppIds 复核游戏绑定, 并通过 shouldUploadDistFile 将根 manifest.json 排除出普通 CDN 文件。Web/Companion 上传预算由 validateUploadTotalSize 等发布 helper 独立校验,不能用插件成功代替 deploy 预检。

      import vue from '@vitejs/plugin-vue'
      import { miniappManifest } from '@heybox/hb-sdk/vite'
      import { defineConfig } from 'vite'

      export default defineConfig({
      // base 省略时 miniappManifest() 会补为 './'
      plugins: [vue(), miniappManifest()],
      })

      0.3.1