Обновление файла

This commit is contained in:
2026-07-24 22:56:02 +03:00
parent 4eef281b15
commit 93038d4490
+18 -18
View File
@@ -1,30 +1,30 @@
// VNC-консоль через noVNC. // VNC-консоль через noVNC.
// //
// noVNC — UMD/IIFE-библиотека, она не экспортирует ES-модули, поэтому // В noVNC 1.4.0 основной модуль — это ES-модуль (core/rfb.js), который
// подключаем её через <script> (лежит в /novnc/rfb.js, копируется из // экспортирует класс RFB через `export default`. Грузим его через
// node_modules/@novnc/novnc/lib на этапе сборки Docker-образа). // динамический import(). Скрипт и его зависимости (vendor/, utils/,
// core/inflator.js и т.п.) лежат в /novnc/* внутри nginx-контейнера —
// собирается в Docker-образе из GitHub release (см. frontend/Dockerfile).
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import { api } from "../api.js"; import { api } from "../api.js";
const NOVNC_SCRIPT = "/novnc/rfb.js"; // @vite-ignore — запрещаем Vite пытаться разрешить путь на этапе сборки,
// иначе он упадёт, не найдя модуль в локальной файловой системе.
const NOVNC_MODULE_URL = "/novnc/core/rfb.js";
let scriptPromise = null; let modulePromise = null;
function loadNoVNC() { function loadNoVNC() {
if (typeof window !== "undefined" && window.RFB) { if (modulePromise) return modulePromise;
return Promise.resolve(window.RFB); modulePromise = import(/* @vite-ignore */ NOVNC_MODULE_URL)
} .then((mod) => {
if (scriptPromise) return scriptPromise; if (!mod.default) {
scriptPromise = new Promise((resolve, reject) => { throw new Error("RFB не найден в модуле noVNC");
const script = document.createElement("script"); }
script.src = NOVNC_SCRIPT; return mod.default;
script.async = true; });
script.onload = () => (window.RFB ? resolve(window.RFB) : reject(new Error("RFB не найден после загрузки скрипта"))); return modulePromise;
script.onerror = () => reject(new Error(`Не удалось загрузить ${NOVNC_SCRIPT}`));
document.head.appendChild(script);
});
return scriptPromise;
} }
export default function ConsoleViewer({ instanceId }) { export default function ConsoleViewer({ instanceId }) {