fix: vite dev proxy 端口对齐 7500(支持 VITE_PROXY_TARGET 覆盖)

原指向 127.0.0.1:17650 与后端默认 -addr 127.0.0.1:7500 不符;同步 @types/node devDependency 并纳入 tsconfig
This commit is contained in:
2026-08-17 12:07:14 +08:00
parent 5237e3b594
commit 45346405c2
5 changed files with 35 additions and 13 deletions

View File

@ -31,7 +31,7 @@
## 已知问题(审查发现,待修复) ## 已知问题(审查发现,待修复)
1. ~~设置保存失效P0~~ **已修复**`server.go``NewServeMux` 现在对 `PUT /api/manager/settings` 分发到 `handleSettingsPut`,新增 `TestSettingsPutRoundTrip` 回归测试,前端 SettingsView 保存生效。 1. ~~设置保存失效P0~~ **已修复**`server.go``NewServeMux` 现在对 `PUT /api/manager/settings` 分发到 `handleSettingsPut`,新增 `TestSettingsPutRoundTrip` 回归测试,前端 SettingsView 保存生效。
2. **dev proxy 端口不一致**`web/vite.config.ts` proxy 指向 `127.0.0.1:17650`,与后端默认监听 `127.0.0.1:7500` 不符,前端 dev 联调需对齐 2. ~~dev proxy 端口不一致~~ **已修复**`web/vite.config.ts` proxy 指向 `127.0.0.1:7500`(可用 `VITE_PROXY_TARGET` 覆盖),与后端默认一致
3. **冗余依赖**`vue-router` 在 package.json 依赖中但未被使用App.vue 以视图 ref 手动切页,无路由)。 3. **冗余依赖**`vue-router` 在 package.json 依赖中但未被使用App.vue 以视图 ref 手动切页,无路由)。
4. **README 笔误**:架构图写 `cmds/webui4frpc`,实际目录为 `cmd/webui4frpc` 4. **README 笔误**:架构图写 `cmds/webui4frpc`,实际目录为 `cmd/webui4frpc`
@ -77,7 +77,7 @@
## 建议推进顺序 ## 建议推进顺序
1. [x] 修复「设置保存失效」——给 `PUT /api/manager/settings` 补注册server.go 方法分发 + httpapi 单测) 1. [x] 修复「设置保存失效」——给 `PUT /api/manager/settings` 补注册server.go 方法分发 + httpapi 单测)
2. 对齐 dev proxy 端口vite.config.ts → 7500 2. [x] 对齐 dev proxy 端口——vite.config.ts → 7500(支持 VITE_PROXY_TARGET 覆盖
3. M1 高级传输参数store 加列 → render 输出 → 前端折叠表单 → 单测回归) 3. M1 高级传输参数store 加列 → render 输出 → 前端折叠表单 → 单测回归)
4. M5 补一键构建脚本 / CI 4. M5 补一键构建脚本 / CI

22
web/package-lock.json generated
View File

@ -1,11 +1,11 @@
{ {
"name": "webui-frpc-web", "name": "webui4frpc-web",
"version": "0.1.0", "version": "0.1.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "webui-frpc-web", "name": "webui4frpc-web",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"@vue-flow/background": "^1.3.2", "@vue-flow/background": "^1.3.2",
@ -16,6 +16,7 @@
"vue-router": "^4.5.0" "vue-router": "^4.5.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^26.2.0",
"@vitejs/plugin-vue": "^6.0.3", "@vitejs/plugin-vue": "^6.0.3",
"@vue/tsconfig": "^0.8.1", "@vue/tsconfig": "^0.8.1",
"sass-embedded": "^1.102.0", "sass-embedded": "^1.102.0",
@ -1263,6 +1264,16 @@
"@types/lodash": "*" "@types/lodash": "*"
} }
}, },
"node_modules/@types/node": {
"version": "26.2.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz",
"integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~8.3.0"
}
},
"node_modules/@types/web-bluetooth": { "node_modules/@types/web-bluetooth": {
"version": "0.0.20", "version": "0.0.20",
"resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
@ -2729,6 +2740,13 @@
"node": ">=14.17" "node": ">=14.17"
} }
}, },
"node_modules/undici-types": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz",
"integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==",
"dev": true,
"license": "MIT"
},
"node_modules/varint": { "node_modules/varint": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",

View File

@ -17,6 +17,7 @@
"vue-router": "^4.5.0" "vue-router": "^4.5.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^26.2.0",
"@vitejs/plugin-vue": "^6.0.3", "@vitejs/plugin-vue": "^6.0.3",
"@vue/tsconfig": "^0.8.1", "@vue/tsconfig": "^0.8.1",
"sass-embedded": "^1.102.0", "sass-embedded": "^1.102.0",

View File

@ -16,5 +16,5 @@
"noUnusedParameters": true, "noUnusedParameters": true,
"noFallthroughCasesInSwitch": true "noFallthroughCasesInSwitch": true
}, },
"include": ["src/**/*.ts", "src/**/*.vue"] "include": ["src/**/*.ts", "src/**/*.vue", "vite.config.ts"]
} }

View File

@ -1,14 +1,17 @@
import { defineConfig } from 'vite' import { defineConfig } from "vite";
import vue from '@vitejs/plugin-vue' import vue from "@vitejs/plugin-vue";
import { fileURLToPath } from 'node:url' import { fileURLToPath } from "node:url";
// Backend default port (cmd/webui4frpc -addr). Override with VITE_PROXY_TARGET.
const backend = process.env.VITE_PROXY_TARGET || "http://127.0.0.1:7500";
// The frontend is served by the Go binary at / (embedded dist), and talks to // The frontend is served by the Go binary at / (embedded dist), and talks to
// the same origin via /api/manager/*. // the same origin via /api/manager/*.
export default defineConfig({ export default defineConfig({
plugins: [vue()], plugins: [vue()],
base: '/', base: "/",
resolve: { resolve: {
alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) }, alias: { "@": fileURLToPath(new URL("./src", import.meta.url)) },
}, },
css: { css: {
preprocessorOptions: { preprocessorOptions: {
@ -18,11 +21,11 @@ export default defineConfig({
}, },
}, },
build: { build: {
outDir: 'dist', outDir: "dist",
}, },
server: { server: {
proxy: { proxy: {
'/api': 'http://127.0.0.1:17650', "/api": backend,
}, },
}, },
}) });