重大改进:用原生 JSON 存储替换 electron-store

- 实现 SimpleStore 类,使用原生 fs 操作 JSON 文件
- 解决 "Cannot find module 'conf'" 的依赖问题
- 移除 electron-store 依赖,减少包体积
- 配置文件存储在 ~/.cc-switch/config.json
- 数据格式透明,便于备份和调试
- 修复 TypeScript 类型问题
- 测试通过:构建、打包、运行正常
This commit is contained in:
farion1231
2025-08-07 10:09:17 +08:00
parent 1688f88226
commit edc203a10b
3 changed files with 69 additions and 16 deletions

56
src/main/store.ts Normal file
View File

@@ -0,0 +1,56 @@
import fs from 'fs/promises'
import path from 'path'
import os from 'os'
import { AppConfig } from '../shared/types'
export class SimpleStore {
private configPath: string
private configDir: string
private data: AppConfig = { providers: {}, current: '' }
constructor() {
this.configDir = path.join(os.homedir(), '.cc-switch')
this.configPath = path.join(this.configDir, 'config.json')
this.loadData()
}
private async loadData(): Promise<void> {
try {
const content = await fs.readFile(this.configPath, 'utf-8')
this.data = JSON.parse(content)
} catch (error) {
// 文件不存在或格式错误,使用默认数据
this.data = { providers: {}, current: '' }
await this.saveData()
}
}
private async saveData(): Promise<void> {
try {
// 确保目录存在
await fs.mkdir(this.configDir, { recursive: true })
// 写入配置文件
await fs.writeFile(this.configPath, JSON.stringify(this.data, null, 2), 'utf-8')
} catch (error) {
console.error('保存配置失败:', error)
}
}
get<T>(key: keyof AppConfig, defaultValue?: T): T {
const value = this.data[key] as T
return value !== undefined ? value : (defaultValue as T)
}
async set<T>(key: keyof AppConfig, value: T): Promise<void> {
this.data[key] = value as any
await this.saveData()
}
// 获取配置文件路径,用于调试
getConfigPath(): string {
return this.configPath
}
}
// 创建单例
export const store = new SimpleStore()