const fs = require('fs-extra'); const path = require('path'); const { defaultLogger } = require('../backend/utils/logger'); // 创建logger实例 const logger = defaultLogger.child('CreatePortable'); async function createPortable() { const distDir = path.join(__dirname, '..', 'dist'); const portableDir = path.join(__dirname, '..', 'pixiv-manager-portable'); try { // 清理之前的便携版 await fs.remove(portableDir); await fs.ensureDir(portableDir); // 复制可执行文件 const exeName = 'pixiv-manager.exe'; const exePath = path.join(distDir, exeName); if (await fs.pathExists(exePath)) { await fs.copy(exePath, path.join(portableDir, exeName)); } // 创建配置文件 const config = { server: { port: 3000, autoOpenBrowser: true }, proxy: { port: null, enabled: "auto" }, logging: { level: "INFO" }, system: { threadPoolSize: 16 } }; await fs.writeFile(path.join(portableDir, 'config.json'), JSON.stringify(config, null, 2), 'utf8'); // 创建README const readme = `# Pixiv Manager 便携版 ## 使用说明 1. 双击 \`pixiv-manager.exe\` 启动程序 2. 在浏览器中访问 http://localhost:3000 3. 按 Ctrl+C 停止服务器 ## 配置设置 如需修改配置,请用记事本编辑 \`config.json\` 文件: ### 代理设置(重要) 修改 proxy 部分: \`\`\`json { "proxy": { "port": null, // 代理端口号(auto模式下可为null) "enabled": "auto" // 代理模式:true/false/"auto" } } \`\`\` 代理模式说明: - \`"auto"\`: 自动检测系统代理(推荐) - \`true\`: 启用指定端口的代理 - \`false\`: 禁用代理 常见代理端口: - Clash: 7890 - V2Ray: 10809 - Shadowsocks: 1080 **推荐使用 "auto" 模式**,程序会自动检测 Clash 等代理软件的系统代理设置。 ### 服务器端口设置 修改 server 部分: \`\`\`json { "server": { "port": 3000, // 服务器端口,默认3000 "autoOpenBrowser": true // 是否自动打开浏览器 } } \`\`\` ### 日志级别设置 修改 logging 部分: \`\`\`json { "logging": { "level": "INFO" // 日志级别 } } \`\`\` 可选的日志级别: - ERROR: 只显示错误信息 - WARN: 显示警告及以上级别信息 - INFO: 显示一般信息及以上级别信息(默认) - DEBUG: 显示调试信息及以上级别信息 - TRACE: 显示所有级别信息(最详细) ### 系统设置 修改 system 部分: \`\`\`json { "system": { "threadPoolSize": 16 // 线程池大小,影响下载性能 } } \`\`\` ## 注意事项 - 首次运行可能需要几秒钟启动时间 - 程序会在当前目录创建数据文件夹 - 没代理或者代理设置错误无法成功登录,注意仔细检查,获取code的时间比较短,记得快速操作 - 支持Windows 10/11 64位系统 - 修改配置文件后需要重启程序才能生效 `; await fs.writeFile(path.join(portableDir, 'README.txt'), readme, 'utf8'); // 创建数据目录 await fs.ensureDir(path.join(portableDir, 'data')); await fs.ensureDir(path.join(portableDir, 'downloads')); logger.info('便携版创建完成!'); logger.info(`位置: ${portableDir}`); logger.info('可以将整个文件夹打包分发给用户'); } catch (error) { logger.error('创建便携版失败', error); } } createPortable();