108 lines
2.7 KiB
JavaScript
108 lines
2.7 KiB
JavaScript
#!/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)
|
||
})
|