#!/usr/bin/env node /** * 部署脚本 - 自动配置环境变量和构建项目 */ const fs = require('fs') const path = require('path') const { execSync } = require('child_process') console.log('🚀 开始部署流程...') // 检查是否有真实的API服务器 async function checkApiServer(apiUrl) { try { const fetch = (await import('node-fetch')).default const response = await fetch(`${apiUrl}/health`, { timeout: 5000, method: 'GET' }) return response.ok } catch (error) { console.log(`❌ API服务器检查失败: ${error.message}`) return false } } // 读取环境配置 function readEnvFile(filePath) { if (!fs.existsSync(filePath)) { return {} } const content = fs.readFileSync(filePath, 'utf8') const env = {} content.split('\n').forEach(line => { const trimmed = line.trim() if (trimmed && !trimmed.startsWith('#')) { const [key, ...valueParts] = trimmed.split('=') if (key && valueParts.length > 0) { env[key.trim()] = valueParts.join('=').trim() } } }) return env } // 写入环境配置 function writeEnvFile(filePath, env) { const content = Object.entries(env) .map(([key, value]) => `${key}=${value}`) .join('\n') fs.writeFileSync(filePath, content + '\n') } async function main() { // 读取生产环境配置 const prodEnv = readEnvFile('.env.production') const apiUrl = prodEnv.VITE_API_BASE_URL if (apiUrl) { console.log(`🔍 检查API服务器: ${apiUrl}`) const isApiAvailable = await checkApiServer(apiUrl.replace('/api', '')) if (isApiAvailable) { console.log('✅ API服务器可用,使用真实API') prodEnv.VITE_ENABLE_MOCK = 'false' } else { console.log('❌ API服务器不可用,启用Mock模式') prodEnv.VITE_ENABLE_MOCK = 'true' } } else { console.log('⚠️ 未配置API地址,启用Mock模式') prodEnv.VITE_ENABLE_MOCK = 'true' } // 更新生产环境配置 writeEnvFile('.env.production', prodEnv) console.log('📝 已更新生产环境配置') // 构建项目 console.log('🔨 开始构建项目...') try { execSync('npm run build', { stdio: 'inherit' }) console.log('✅ 构建完成!') // 显示部署信息 console.log('\n📋 部署信息:') console.log(` Mock模式: ${prodEnv.VITE_ENABLE_MOCK === 'true' ? '启用' : '禁用'}`) if (apiUrl) { console.log(` API地址: ${apiUrl}`) } console.log(' 构建文件: ./dist/') } catch (error) { console.error('❌ 构建失败:', error.message) process.exit(1) } } main().catch(error => { console.error('❌ 部署失败:', error) process.exit(1) })