跳到正文

部署策略

Vifu 会把构建后的输出视为被审核的运行成果物。

这意味着运行游戏的 JavaScript 必须在部署成果物内。Vifu deploy 不会下载 CDN 脚本,不会修改 HTML,不会替你内置依赖,也不会生成部署锁文件。

简短版本

允许:

  • 构建输出中的已打包 JavaScript
  • 构建输出中的本地资源
  • Google Fonts
  • 来自已批准包 CDN 的、固定版本的静态 CSS、字体、图片、媒体
  • 普通外部链接
  • 通过 @vifu/sdkwindow.Vifu 访问 AI / 后端

阻止:

  • CDN JavaScript
  • 远程 import(...)importScripts(...) 或 Worker 脚本
  • 远程 .js.mjs.wasm URL
  • 游戏 JavaScript 直接请求外部 AI / 后端 API
  • 部署成果物中残留的 LM Studio / Ollama 等本地专用提供方

为什么阻止远程 JavaScript

Vifu 上运行的游戏在托管 iframe 中执行,并能访问 AI、存档状态、资源、AI 伙伴动作等平台能力。如果游戏可以执行任意远程 JavaScript,被审核的成果物就不再等于实际运行的代码。

CSS、字体、图片、媒体不定义游戏逻辑,所以可以通过按类别限制的 CSP 允许已批准的静态资源。

好的例子

html
<link
  rel="stylesheet"
  href="https://cdn.jsdelivr.net/npm/[email protected]/dist/theme.css"
>
ts
const result = await Vifu.ai.generateText({
  model: "basic",
  messages: [{ role: "user", content: "Give a short hint." }]
});

会被阻止的例子

html
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/phaser.min.js"></script>
ts
await import("https://cdn.jsdelivr.net/npm/@mediapipe/[email protected]/+esm");
fetch("https://api.openai.com/v1/chat/completions");
fetch("http://localhost:1234/v1/chat/completions");

如何读 CLI 错误

vifu deploy 会显示失败的构建文件、行号、规则、URL、原因和修复建议。

text
Vifu deploy blocked this runtime artifact.

1. Remote JavaScript import
   Built file: chunk.js:2
   Rule: remote code import
   URL: https://cdn.jsdelivr.net/npm/@mediapipe/[email protected]/+esm
   Why blocked: Remote JavaScript/WASM would execute outside the reviewed deploy artifact.
   Fix: Bundle the dependency locally, remove the unused provider/import, or lazy-load it only in a non-deployed build profile.

运行环境 CSP

  • script-src 不包含 CDN JavaScript 主机。
  • connect-src 限制为 Vifu platform API。
  • style-srcfont-srcimg-srcmedia-src 可以按类别允许已批准的静态资源主机。
  • Worker / eval 行为是内部运行环境规则,不是公开清单里的开关。