diff --git a/.env.example b/.env.example index f2aa859..d100c19 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,7 @@ VITE_AI_API_URL=http://localhost:8000 +FIR_LIBRARY_PROXY_TARGET=https://cs-fir.luxsin.com.cn + +# 前端 FIR API 地址,默认使用生产服务;可手动修改覆盖。 +# 如需使用开发代理,可设为 /fir-library。 +# 生产配置见 .env.production,pnpm build 自动加载。 +VITE_FIR_API_BASE=https://cs-fir.luxsin.com.cn/api diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..0f2a497 --- /dev/null +++ b/.env.production @@ -0,0 +1,6 @@ +# pnpm build 使用 production 模式,自动加载本文件。 +# 前端直接请求生产 API;/api 对应开发代理中的路径重写。 +VITE_FIR_API_BASE=https://cs-fir.luxsin.com.cn/api + +# 仅供 Vite 开发代理使用,不会在静态部署中创建代理。 +FIR_LIBRARY_PROXY_TARGET=https://cs-fir.luxsin.com.cn diff --git a/client/src/components/FirPanel.tsx b/client/src/components/FirPanel.tsx index f3dd6c2..9f54b30 100644 --- a/client/src/components/FirPanel.tsx +++ b/client/src/components/FirPanel.tsx @@ -6,7 +6,7 @@ import { useEffect, useRef, useState } from 'react'; import { useDevice } from '@/contexts/DeviceContext'; import { decodeFirWav, FirError, firRoomName, applyFir, readFirBinary, readFirJson, validateFirBinary, type FirRoom } from '@/lib/fir'; -const LIBRARY = (import.meta.env.VITE_FIR_API_BASE || '/fir-library').replace(/\/$/, ''); +const LIBRARY = (import.meta.env.VITE_FIR_API_BASE || 'https://cs-fir.luxsin.com.cn/api').replace(/\/$/, ''); export default function FirPanel() { const { ip } = useDevice(); diff --git a/client/src/components/FirRoomDetails.tsx b/client/src/components/FirRoomDetails.tsx index 555ed14..de0e951 100644 --- a/client/src/components/FirRoomDetails.tsx +++ b/client/src/components/FirRoomDetails.tsx @@ -3,7 +3,7 @@ import { Dialog, DialogContent, DialogTitle, DialogDescription, DialogClose } fr import { firImageUrl, firRoomName, type FirRoom } from '@/lib/fir'; import { firTranslate } from '@/lib/firLocale'; -const LIBRARY = (import.meta.env.VITE_FIR_API_BASE || '/fir-library').replace(/\/$/, ''); +const LIBRARY = (import.meta.env.VITE_FIR_API_BASE || 'https://cs-fir.luxsin.com.cn/api').replace(/\/$/, ''); type Props = { room: FirRoom; language?: number }; export function FirRoomDetailsBody({ room, language }: Props) { diff --git a/package.json b/package.json index f005317..c80b43c 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "dev": "vite --host", "dev:legacy": "vite --config vite.legacy.config.ts --host", "build": "pnpm build:legacy && pnpm build:modern", - "build:modern": "vite build", - "build:legacy": "vite build --config vite.legacy.config.ts", + "build:modern": "vite build --mode production", + "build:legacy": "vite build --config vite.legacy.config.ts --mode production", "build:test": "pnpm build:test:legacy && pnpm build:test:modern", "build:test:modern": "DEPLOY_ENV=test vite build", "build:test:legacy": "DEPLOY_ENV=test vite build --config vite.legacy.config.ts", diff --git a/vite.config.ts b/vite.config.ts index 046e498..f1acb06 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,7 +4,7 @@ import tailwindcss from "@tailwindcss/vite"; import react from "@vitejs/plugin-react"; import fs from "node:fs"; import path from "node:path"; -import { defineConfig, type Plugin } from "vite"; +import { defineConfig, loadEnv, type Plugin } from "vite"; import { vitePluginManusRuntime } from "vite-plugin-manus-runtime"; const PROJECT_ROOT = import.meta.dirname; @@ -59,7 +59,10 @@ const deployBase = isProd ? (DEPLOY_ENV === "test" ? `/${DEPLOY_PROJECT}/test/modern/` : `/${DEPLOY_PROJECT}/v2/modern/`) : "/"; -export default defineConfig({ +export default defineConfig(({ mode }) => { + const env = loadEnv(mode, PROJECT_ROOT, ""); + + return { plugins, base: deployBase, resolve: { @@ -138,7 +141,7 @@ export default defineConfig({ timeout: 0, proxyTimeout: 0, }, - "/fir-library": { target: "http://127.0.0.1:8000", changeOrigin: true, rewrite: p => p.replace(/^\/fir-library/, "/api") }, + "/fir-library": { target: env.FIR_LIBRARY_PROXY_TARGET || "https://cs-fir.luxsin.com.cn", changeOrigin: true, rewrite: p => p.replace(/^\/fir-library/, "/api") }, "/luxsin-audio-api": { target: "https://api.luxsin.com.cn", changeOrigin: true, @@ -159,4 +162,5 @@ export default defineConfig({ deny: ["**/.*"], }, }, + }; }); diff --git a/vite.legacy.config.ts b/vite.legacy.config.ts index 0807459..2353171 100644 --- a/vite.legacy.config.ts +++ b/vite.legacy.config.ts @@ -3,7 +3,7 @@ import { jsxLocPlugin } from "@builder.io/vite-plugin-jsx-loc"; import react from "@vitejs/plugin-react"; import path from "node:path"; import { createRequire } from "node:module"; -import { defineConfig, type Plugin } from "vite"; +import { defineConfig, loadEnv, type Plugin } from "vite"; const PROJECT_ROOT = import.meta.dirname; const require = createRequire(import.meta.url); @@ -52,7 +52,9 @@ const deployBase = isProd ? (DEPLOY_ENV === "test" ? `/${DEPLOY_PROJECT}/test/legacy/` : `/${DEPLOY_PROJECT}/v2/legacy/`) : "/"; -export default defineConfig({ +export default defineConfig(({ mode }) => { + const env = loadEnv(mode, PROJECT_ROOT, ""); + return { plugins: [firDevProxy(),legacySkipModernCssPlugin(), legacyIndexRewritePlugin(), react(), jsxLocPlugin()], define: { "import.meta.env.VITE_X9_LEGACY": JSON.stringify("1"), @@ -118,7 +120,7 @@ export default defineConfig({ timeout: 0, proxyTimeout: 0, }, - "/fir-library": { target: "http://127.0.0.1:8000", changeOrigin: true, rewrite: p => p.replace(/^\/fir-library/, "/api") }, + "/fir-library": { target: env.FIR_LIBRARY_PROXY_TARGET || "https://cs-fir.luxsin.com.cn", changeOrigin: true, rewrite: p => p.replace(/^\/fir-library/, "/api") }, "/luxsin-audio-api": { target: "https://api.luxsin.com.cn", changeOrigin: true, @@ -126,4 +128,5 @@ export default defineConfig({ }, }, }, + }; });