可直接加入 Vite plugins 数组的
MiniappManifestPlugin。插件固定名为
heybox-miniapp-manifest,并提供 config、configResolved、configureServer、buildEnd、
transformIndexHtml、closeBundle hooks;这些 hooks 由 Vite 调用,应用代码不应手动调用。
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 生产 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()],
})
heybox.permissions 严格 schema 与迁移规则。heybox.window 字段与 Host 消费语义。
创建工坊小程序使用的 Vite 插件。