diff --git a/backend/mpc-system/services/service-party-app/electron/modules/database.ts b/backend/mpc-system/services/service-party-app/electron/modules/database.ts index 3af9add5..e2a1d996 100644 --- a/backend/mpc-system/services/service-party-app/electron/modules/database.ts +++ b/backend/mpc-system/services/service-party-app/electron/modules/database.ts @@ -11,15 +11,15 @@ import { v4 as uuidv4 } from 'uuid'; // ============================================================================= function getSqlJsWasmPath(): string { // 在开发环境中,WASM 文件在 node_modules 中 - // 在生产环境中,WASM 文件被解压到 app.asar.unpacked 目录 + // 在生产环境中,WASM 文件被复制到 extraResources 目录 const isDev = !app.isPackaged; if (isDev) { // 开发环境: 使用 node_modules 中的文件 return path.join(__dirname, '../../node_modules/sql.js/dist/sql-wasm.wasm'); } else { - // 生产环境: 使用 asar.unpacked 中的文件 - return path.join(process.resourcesPath, 'app.asar.unpacked/node_modules/sql.js/dist/sql-wasm.wasm'); + // 生产环境: 使用 extraResources 中的文件 + return path.join(process.resourcesPath, 'sql-wasm.wasm'); } } @@ -108,17 +108,28 @@ export class DatabaseManager { private async initialize(): Promise { // 获取 WASM 文件路径 const wasmPath = getSqlJsWasmPath(); + console.log('[Database] App packaged:', app.isPackaged); + console.log('[Database] Resources path:', process.resourcesPath); console.log('[Database] WASM path:', wasmPath); console.log('[Database] WASM exists:', fs.existsSync(wasmPath)); // 初始化 sql.js (加载 WASM) - // 如果 WASM 文件不存在,让 sql.js 自己处理(会尝试从 CDN 加载或使用内置版本) - const config: { locateFile?: (file: string) => string } = {}; + // 使用 wasmBinary 直接加载 WASM 文件,这在打包环境中更可靠 + let config: { wasmBinary?: ArrayBuffer; locateFile?: (file: string) => string } = {}; + if (fs.existsSync(wasmPath)) { + // 直接读取 WASM 文件作为 ArrayBuffer - 这种方式更可靠 + const wasmBuffer = fs.readFileSync(wasmPath); + config.wasmBinary = wasmBuffer.buffer.slice( + wasmBuffer.byteOffset, + wasmBuffer.byteOffset + wasmBuffer.byteLength + ); + console.log('[Database] WASM loaded as binary, size:', wasmBuffer.length); + } else { + console.warn('[Database] WASM file not found, sql.js will try to load from default location'); + // 作为备用方案,使用 locateFile config.locateFile = (file: string) => { - if (file === 'sql-wasm.wasm') { - return wasmPath; - } + console.log('[Database] locateFile called for:', file); return file; }; } diff --git a/backend/mpc-system/services/service-party-app/package.json b/backend/mpc-system/services/service-party-app/package.json index 7d767c31..73c8b28e 100644 --- a/backend/mpc-system/services/service-party-app/package.json +++ b/backend/mpc-system/services/service-party-app/package.json @@ -73,8 +73,7 @@ "files": [ "dist/**/*", "dist-electron/**/*", - "wasm/**/*", - "node_modules/sql.js/**/*" + "wasm/**/*" ], "extraResources": [ { @@ -83,6 +82,10 @@ "filter": [ "**/*" ] + }, + { + "from": "node_modules/sql.js/dist/sql-wasm.wasm", + "to": "sql-wasm.wasm" } ], "win": {