docs/archives/110-desktop-indexeddb-fix/fix-details.md
缺少必要依赖
构建配置不一致
缺少资源文件
跨平台兼容性问题
构建路径问题
// packages/desktop/package.json
"dependencies": {
"node-fetch": "^2.7.0",
"dotenv": "^16.0.0", // 新增
"@prompt-optimizer/core": "workspace:*" // 新增
}
// packages/desktop/main.js
// 修复前:
const result = await modelManager.getModels();
// 修复后:
const result = await modelManager.getAllModels();
// 修复addModel参数传递:
const { key, ...config } = model;
await modelManager.addModel(key, config);
build.jsbuild:web 脚本使用Node.js方法替代Windows专用的robocopy根本原因:useAppInitializer.ts中的架构设计错误
// 错误的实现(修复前)
if (isRunningInElectron()) {
storageProvider = StorageFactory.create('memory'); // ❌ 渲染进程不应该有存储
dataManager = createDataManager(..., storageProvider); // ❌ 使用了渲染进程存储
const languageService = createTemplateLanguageService(storageProvider); // ❌ 重复创建服务
}
问题分析:
// 正确的实现(修复后)
if (isRunningInElectron()) {
storageProvider = null; // ✅ 渲染进程不使用本地存储
// 只创建代理服务,所有操作通过IPC
modelManager = new ElectronModelManagerProxy();
// ...其他代理服务
}
正确架构:
在packages/core/src/services/prompt/factory.ts中发现模块级别的存储创建:
// 问题代码(已修复)
const storageProvider = StorageFactory.createDefault(); // ❌ 模块加载时就创建IndexedDB
影响:无论在什么环境下,只要导入这个模块就会创建IndexedDB存储!
// 修复后的代码
export function createPromptService(
modelManager: IModelManager,
llmService: ILLMService,
templateManager: ITemplateManager,
historyManager: IHistoryManager
): PromptService {
return new PromptService(modelManager, llmService, templateManager, historyManager);
}
按照用户建议,彻底删除了StorageFactory.createDefault()方法:
// 删除的问题方法
static createDefault(): IStorageProvider {
// 这个方法会自动创建IndexedDB,无论在什么环境下
}
任务状态:✅ 完成 问题根源:历史遗留的IndexedDB数据 + 模块级存储创建 解决方案:删除createDefault()方法 + 手动清理IndexedDB 验证结果:Desktop应用正常运行,无IndexedDB创建