diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml index 3f489a8..525d1ad 100644 --- a/.gitea/workflows/docker-build.yml +++ b/.gitea/workflows/docker-build.yml @@ -12,6 +12,11 @@ on: jobs: build-image: runs-on: ubuntu-latest + env: + # 关键: 显式固定 Android/OTA 后端地址, 覆盖 runner 环境里可能存在的 + # 其他 VITE_API_BASE 值。否则 OTA 包里的前端可能连错后端, 导致 + # "OTA 更新后登录失败/进不去内部"。与 android-build.yml 保持一致。 + VITE_API_BASE: http://bh.vps.honor3.com:3001 steps: - uses: https://gitea.com/actions/checkout@v4 diff --git a/package-lock.json b/package-lock.json index 3919ad6..33d15ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,6 @@ "name": "iboard", "version": "1.0.0", "dependencies": { - "@huolala-tech/page-spy": "^1.5.7", "@prisma/adapter-mariadb": "^7.9.1", "@prisma/client": "^7.7.0", "antd-mobile": "^5.42.3", @@ -807,20 +806,6 @@ "hono": "^4" } }, - "node_modules/@huolala-tech/page-spy": { - "version": "1.5.7", - "resolved": "https://registry.npmmirror.com/@huolala-tech/page-spy/-/page-spy-1.5.7.tgz", - "integrity": "sha512-M19WkH6K2taPpdi7gZ9Tz6v0vY/yW4ziffPXdU+p9+pdSmu1s0OhfxjcsWgERAYsaRLZNloSWqJZyWT5zsYIwA==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.0", - "copy-to-clipboard": "^3.3.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", @@ -3242,15 +3227,6 @@ "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "license": "MIT" }, - "node_modules/copy-to-clipboard": { - "version": "3.3.3", - "resolved": "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", - "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", - "license": "MIT", - "dependencies": { - "toggle-selection": "^1.0.6" - } - }, "node_modules/cors": { "version": "2.8.6", "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.6.tgz", @@ -6039,12 +6015,6 @@ "node": ">=18" } }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", - "license": "MIT" - }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", diff --git a/package.json b/package.json index 2b1e238..1392ac8 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "publish": "bash scripts/wsl/build-apk.sh release" }, "dependencies": { - "@huolala-tech/page-spy": "^1.5.7", "@prisma/adapter-mariadb": "^7.9.1", "@prisma/client": "^7.7.0", "antd-mobile": "^5.42.3", diff --git a/src/api/ota.js b/src/api/ota.js index f645a12..a6d2601 100644 --- a/src/api/ota.js +++ b/src/api/ota.js @@ -8,7 +8,7 @@ import { getApiBase, getToken } from './client.js' import { APP_VERSION, BUILD_ID } from '../version.js' -// 判断是否在 Tauri WebView 内 (与 src/debug/pagespy.js 同样的判定) +// 判断是否在 Tauri WebView 内 (有 __TAURI_INTERNALS__ 即 Tauri 环境) const inTauri = typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window // 拼接绝对 URL: 在 Tauri (VITE_API_BASE 有值) 时直连, 否则同源 diff --git a/src/debug/pagespy.js b/src/debug/pagespy.js deleted file mode 100644 index c30b7ca..0000000 --- a/src/debug/pagespy.js +++ /dev/null @@ -1,21 +0,0 @@ -// 仅在 Tauri WebView 内启用 PageSpy, 用于生产环境远程调试. -// web 模式 (Vite dev / 浏览器) 通过检测 window.__TAURI_INTERNALS__ 直接跳过, -// 配合 dynamic import 让 page-spy 这个 chunk 在 web 模式下完全不下载. -// VITE_PAGESPY_API 留空可关闭连接 (例如本地调试不想连远端 PageSpy 服务时). -// 加载失败不阻塞应用启动, 仅 console.warn 提示. - -const PAGESPY_API = import.meta.env.VITE_PAGESPY_API || 'http://bh.vps.honor3.com:6752' -const inTauri = typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window - -if (inTauri && PAGESPY_API) { - // 动态 import: 仅在 Tauri 内才下载 page-spy chunk - import('@huolala-tech/page-spy') - .then(({ default: PageSpy }) => { - // PageSpy 默认会 hook fetch / XMLHttpRequest, 自动抓取网络请求和错误 - const instance = new PageSpy({ api: PAGESPY_API }) - window.__IBOARD_PAGESPY__ = instance - }) - .catch((err) => { - console.warn('[PageSpy] init failed:', err) - }) -} \ No newline at end of file diff --git a/src/main.jsx b/src/main.jsx index 3d75afe..9c168f4 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -1,28 +1,25 @@ -// 远程调试: 仅在 Tauri WebView 内启用, web 模式自动跳过 -import './debug/pagespy.js' - -// 移动端 UI 框架: 全局样式 + 主题 (antd-mobile 5) -import 'antd-mobile/es/global' - -import React from 'react' -import ReactDOM from 'react-dom/client' -import { BrowserRouter } from 'react-router-dom' -import App from './App.jsx' -import { AuthProvider } from './auth/AuthContext.jsx' -import { initOta } from './api/ota.js' -import './styles/globals.css' - -// OTA 启动: 仅 Tauri 内生效 -// - notifyReady: 确认当前资源可用, 否则下次启动自动回滚 (hotswap 插件行为) -// - 异步执行, 不阻塞 React 挂载 -initOta() - -ReactDOM.createRoot(document.getElementById('root')).render( - - - - - - - , +// 移动端 UI 框架: 全局样式 + 主题 (antd-mobile 5) +import 'antd-mobile/es/global' + +import React from 'react' +import ReactDOM from 'react-dom/client' +import { BrowserRouter } from 'react-router-dom' +import App from './App.jsx' +import { AuthProvider } from './auth/AuthContext.jsx' +import { initOta } from './api/ota.js' +import './styles/globals.css' + +// OTA 启动: 仅 Tauri 内生效 +// - notifyReady: 确认当前资源可用, 否则下次启动自动回滚 (hotswap 插件行为) +// - 异步执行, 不阻塞 React 挂载 +initOta() + +ReactDOM.createRoot(document.getElementById('root')).render( + + + + + + + , )