feat(build): 配置多平台打包输出

- 添加 .env.web/.desktop/.android/.tv 环境变量文件
- 修改 vite.config.js 支持多平台输出到 dist/{platform}/
- 添加 npm run build:web/desktop/android/tv 命令
- 更新 desktop/android/android-tv/web 各端的资源引用路径
- 更新 build-mac.sh 使用 build:desktop 命令
This commit is contained in:
李岩岩 2026-02-05 14:19:28 +08:00
parent a143c9023c
commit 2cab50db31
11 changed files with 56 additions and 21 deletions

View File

@ -7,16 +7,16 @@ set -e
echo "=== IPTV Android TV 构建 ===" echo "=== IPTV Android TV 构建 ==="
# 检查 UI 构建产物 # 检查 UI 构建产物
if [ ! -d "../ui/dist-web" ]; then if [ ! -d "../ui/dist/tv" ]; then
echo "错误: 未找到 ../ui/dist-web 目录" echo "错误: 未找到 ../ui/dist/tv 目录"
echo "请先构建 Web UI: cd ../ui && npm run build" echo "请先构建 Web UI: cd ../ui && npm run build:tv"
exit 1 exit 1
fi fi
# 复制 Web 资源到 Android assets # 复制 Web 资源到 Android assets
echo "复制 Web 资源..." echo "复制 Web 资源..."
mkdir -p app/src/main/assets/www mkdir -p app/src/main/assets/www
cp -r ../ui/dist-web/* app/src/main/assets/www/ cp -r ../ui/dist/tv/* app/src/main/assets/www/
# 统计文件 # 统计文件
echo "已复制文件数量:" echo "已复制文件数量:"

View File

@ -7,16 +7,16 @@ set -e
echo "=== IPTV Android 构建 ===" echo "=== IPTV Android 构建 ==="
# 检查 UI 构建产物 # 检查 UI 构建产物
if [ ! -d "../ui/dist-web" ]; then if [ ! -d "../ui/dist/android" ]; then
echo "错误: 未找到 ../ui/dist-web 目录" echo "错误: 未找到 ../ui/dist/android 目录"
echo "请先构建 Web UI: cd ../ui && npm run build" echo "请先构建 Web UI: cd ../ui && npm run build:android"
exit 1 exit 1
fi fi
# 复制 Web 资源到 Android assets # 复制 Web 资源到 Android assets
echo "复制 Web 资源..." echo "复制 Web 资源..."
mkdir -p app/src/main/assets/www mkdir -p app/src/main/assets/www
cp -r ../ui/dist-web/* app/src/main/assets/www/ cp -r ../ui/dist/android/* app/src/main/assets/www/
# 统计文件 # 统计文件
echo "已复制文件数量:" echo "已复制文件数量:"

View File

@ -17,8 +17,8 @@ echo "✓ Rust 已安装 ($(cargo --version))"
echo "📦 步骤 1/4: 构建 ui 应用..." echo "📦 步骤 1/4: 构建 ui 应用..."
cd ui cd ui
npm install npm install
npm run build npm run build:desktop
cp -r public/api dist-web/ cp -r public/api dist/desktop/
cd .. cd ..
# 步骤2: 安装 Tauri 依赖 # 步骤2: 安装 Tauri 依赖

View File

@ -2,8 +2,8 @@
"build": { "build": {
"beforeBuildCommand": "", "beforeBuildCommand": "",
"beforeDevCommand": "", "beforeDevCommand": "",
"devPath": "../../ui/dist-web", "devPath": "../../ui/dist/desktop",
"distDir": "../../ui/dist-web", "distDir": "../../ui/dist/desktop",
"withGlobalTauri": false "withGlobalTauri": false
}, },
"tauri": { "tauri": {

4
ui/.env.android Normal file
View File

@ -0,0 +1,4 @@
VITE_PLATFORM=android
VITE_API_BASE=/api
VITE_STORAGE_TYPE=android
VITE_ANDROID_ASSET=true

3
ui/.env.desktop Normal file
View File

@ -0,0 +1,3 @@
VITE_PLATFORM=desktop
VITE_API_BASE=/api
VITE_STORAGE_TYPE=indexeddb

5
ui/.env.tv Normal file
View File

@ -0,0 +1,5 @@
VITE_PLATFORM=tv
VITE_API_BASE=/api
VITE_STORAGE_TYPE=android
VITE_ANDROID_ASSET=true
VITE_TV_MODE=true

3
ui/.env.web Normal file
View File

@ -0,0 +1,3 @@
VITE_PLATFORM=web
VITE_API_BASE=/api
VITE_STORAGE_TYPE=indexeddb

View File

@ -4,7 +4,11 @@
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "vite build --mode production",
"build:web": "vite build --mode web",
"build:desktop": "vite build --mode desktop",
"build:android": "vite build --mode android",
"build:tv": "vite build --mode tv",
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {

View File

@ -1,10 +1,26 @@
import { defineConfig } from 'vite' import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
export default defineConfig({ export default defineConfig(({ mode }) => {
// 加载对应的环境变量
const env = loadEnv(mode, process.cwd(), 'VITE_')
const platform = env.VITE_PLATFORM || 'web'
return {
plugins: [vue()], plugins: [vue()],
base: './', base: './',
build: { build: {
outDir: 'dist-web' outDir: `dist/${platform}`,
emptyOutDir: true,
},
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
},
},
define: {
__PLATFORM__: JSON.stringify(platform),
},
} }
}) })

View File

@ -8,7 +8,7 @@ WORKDIR /app
# 复制前端代码 # 复制前端代码
COPY ../ui ./ui COPY ../ui ./ui
WORKDIR /app/ui WORKDIR /app/ui
RUN npm install && npm run build RUN npm install && npm run build:web
# 阶段2运行服务端 # 阶段2运行服务端
FROM node:18-alpine FROM node:18-alpine
@ -23,7 +23,7 @@ RUN npm install --production
COPY src ./src COPY src ./src
# 复制构建好的前端 # 复制构建好的前端
COPY --from=builder /app/ui/dist-web ./public COPY --from=builder /app/ui/dist/web ./public
# 暴露端口 # 暴露端口
EXPOSE 3000 EXPOSE 3000