# 环境变量使用示例 ## 迁移现有代码到使用环境变量 ### 1. API 调用 **之前(硬编码):** ```typescript const response = await fetch('https://cfapi.searchgal.homes/search') ``` **之后(使用配置):** ```typescript import { config } from '@/config' const response = await fetch(`${config.api.baseUrl}/search`) ``` ### 2. 搜索冷却时间 **之前:** ```typescript const COOLDOWN_MS = 30 * 1000 ``` **之后:** ```typescript import { config } from '@/config' const cooldown = config.search.cooldown ``` ### 3. Store 初始化 **在 stores/cache.ts 中:** ```typescript import { config } from '@/config' export const useCacheStore = defineStore('cache', () => { const vndbCacheDuration = ref(config.cache.vndbDuration) const searchCacheDuration = ref(config.cache.searchDuration) const maxCacheSize = ref(config.cache.maxSize) // ... }) ``` **在 stores/history.ts 中:** ```typescript import { config } from '@/config' export const useHistoryStore = defineStore('history', () => { const maxHistoryItems = ref(config.search.maxSearchHistory) // ... }) ``` **在 stores/search.ts 中:** ```typescript import { config } from '@/config' export const useSearchStore = defineStore('search', () => { const searchDisabled = computed(() => { const now = Date.now() return isSearching.value || (now - lastSearchTime.value < config.search.cooldown) }) // ... }) ``` ### 4. Artalk 评论系统 **在 CommentsModal.vue 中:** ```typescript import { config } from '@/config' function initArtalk() { if (!config.features.comments) { return // 如果评论功能被禁用,不初始化 } artalkInstance = Artalk.init({ el: '#Comments', pageKey: config.site.url, pageTitle: config.app.title, server: config.services.artalkServer, site: config.site.name, darkMode: 'auto', }) } ``` ### 5. Quicklink 配置 **在 main.ts 中:** ```typescript import { listen } from 'quicklink' import { config } from '@/config' window.addEventListener('load', () => { listen({ delay: config.performance.quicklinkDelay, limit: config.performance.quicklinkLimit, ignores: [/\/api\//, /artalk/], }) }) ``` ### 6. 状态检查 **在 SearchHeader.vue 中:** ```typescript import { config } from '@/config' async function checkStatus() { try { const controller = new window.AbortController() const timeoutId = setTimeout(() => controller.abort(), 5000) await fetch(config.services.statusUrl, { method: 'HEAD', mode: 'no-cors', signal: controller.signal, }) clearTimeout(timeoutId) statusOnline.value = true } catch (_error) { statusOnline.value = false } } ``` ### 7. 随机背景图片 **在 App.vue 中:** ```typescript import { config } from '@/config' async function loadRandomImage() { try { const timestamp = Date.now() const imageUrl = `${config.services.imageApiUrl}?t=${timestamp}` // ... } catch (error) { // ... } } ``` ### 8. 调试日志 **使用工具函数:** ```typescript import { devLog, devWarn, devError } from '@/config' // 这些日志只在开发环境且 VITE_ENABLE_DEBUG=true 时显示 devLog('Fetching data from API...') devWarn('API response is slow') devError('API request failed') ``` ### 9. 功能开关 **条件渲染:** ```vue ``` ### 10. 主题颜色 **使用环境变量定义的颜色:** ```typescript import { config } from '@/config' // 动态设置 CSS 变量 document.documentElement.style.setProperty('--theme-primary', config.theme.primary) document.documentElement.style.setProperty('--theme-accent', config.theme.accent) ``` ## 完整示例:API 工具类 ```typescript // src/utils/request.ts import { config, devLog, devError } from '@/config' class ApiClient { private baseUrl: string private timeout: number constructor() { this.baseUrl = config.api.baseUrl this.timeout = config.api.timeout } async request(endpoint: string, options: RequestInit = {}) { const url = `${this.baseUrl}${endpoint}` devLog('API Request:', url, options) const controller = new AbortController() const timeoutId = setTimeout(() => controller.abort(), this.timeout) try { const response = await fetch(url, { ...options, signal: controller.signal, }) clearTimeout(timeoutId) devLog('API Response:', response.status, response.statusText) return response } catch (error) { clearTimeout(timeoutId) devError('API Error:', error) throw error } } } export const apiClient = new ApiClient() ``` ## 环境特定逻辑 ```typescript import { isDev, isProd, config } from '@/config' // 开发环境特定逻辑 if (isDev) { // 启用 Vue DevTools if (window.__VUE_DEVTOOLS_GLOBAL_HOOK__) { window.__VUE_DEVTOOLS_GLOBAL_HOOK__.Vue = app } } // 生产环境特定逻辑 if (isProd && config.features.analytics) { // 初始化统计工具 initAnalytics() } // Mock 数据 if (config.dev.mock) { import('./mocks').then(({ setupMocks }) => { setupMocks() }) } ```