// `pnpm build --sim`:把一档分发再打成一个**双击就能看的自包含包**。 // // ## 为什么必须单独做一次打包 // // 发布产物是"给 Wallpaper Engine 的 CEF 用"的:那里是 http 语义,支持 ES module。而"双击打开" // 走 `file://`,浏览器对它另有一套限制。实测(无头 Edge,与用户双击的行为一致): // // file:// 下 结果 // ES module(import / 动态 import) ✗ 被 CORS 拦(origin: null) // fetch() / XMLHttpRequest() ✗ 同上 // 内联 ` 块, * 它的收尾标签是它自己的,不是需要转义的内容。第一版把 driver 也一起查了, * 结果干净源码立刻构建失败——守卫自身写错,比没有守卫更糟。 */ for (const [label, code] of [ ["spine-player", await readFile(abs("src/vendor/spine-player.js"), "utf8")], ["模拟器段", simModule.source], ["运行时段", script], ] as const) { if (/<\/script/i.test(code)) { throw new Error(`bundle: ${release.dir} 的${label}里含 " ${project.title ?? release.displayName}(自包含调试包)
${driver} `; return { html, assetBytes: assets.bytes, skippedAudio: assets.skippedAudio, inlined: assets.count }; }