feat: set data directory path in main process and update preload.js to use it

This commit is contained in:
CaIon
2025-10-05 18:38:25 +08:00
parent 9f44116260
commit 021892b17d
2 changed files with 10 additions and 17 deletions

View File

@@ -222,6 +222,12 @@ function checkServerAvailability(port, maxRetries = 30, retryDelay = 1000) {
function startServer() {
return new Promise((resolve, reject) => {
const isDev = process.env.NODE_ENV === 'development';
const userDataPath = app.getPath('userData');
const dataDir = path.join(userDataPath, 'data');
// 设置环境变量供 preload.js 使用
process.env.ELECTRON_DATA_DIR = dataDir;
if (isDev) {
// 开发模式:假设开发者手动启动了 Go 后端和前端开发服务器
@@ -250,8 +256,6 @@ function startServer() {
// 生产模式:启动二进制服务器
const env = { ...process.env, PORT: PORT.toString() };
const userDataPath = app.getPath('userData');
const dataDir = path.join(userDataPath, 'data');
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });

View File

@@ -1,22 +1,11 @@
const { contextBridge } = require('electron');
// 获取数据目录路径(用于显示给用户)
// 使用字符串拼接而不是 path.join 避免模块依赖问题
// 优先使用主进程设置的真实路径,如果没有则回退到手动拼接
function getDataDirPath() {
const platform = process.platform;
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
switch (platform) {
case 'darwin':
return `${homeDir}/Library/Application Support/New API/data`;
case 'win32': {
const appData = process.env.APPDATA || `${homeDir}\\AppData\\Roaming`;
return `${appData}\\New API\\data`;
}
case 'linux':
return `${homeDir}/.config/New API/data`;
default:
return `${homeDir}/.new-api/data`;
// 如果主进程已设置真实路径,直接使用
if (process.env.ELECTRON_DATA_DIR) {
return process.env.ELECTRON_DATA_DIR;
}
}