148 lines
4.1 KiB
JavaScript
148 lines
4.1 KiB
JavaScript
const fs = require('fs-extra');
|
|
const path = require('path');
|
|
const { defaultLogger } = require('../backend/utils/logger');
|
|
|
|
// 创建logger实例
|
|
const logger = defaultLogger.child('CreatePortable');
|
|
|
|
async function createPortable(platform = 'win') {
|
|
const distDir = path.join(__dirname, '..', 'dist');
|
|
let portableDir = path.join(__dirname, '..', 'pixiv-manager-portable');
|
|
|
|
// 根据平台设置不同的目录名和可执行文件名
|
|
let exeName = 'pixiv-manager.exe';
|
|
let exePath = path.join(distDir, exeName);
|
|
|
|
// 根据平台参数设置
|
|
if (platform === 'linux') {
|
|
portableDir = path.join(__dirname, '..', 'pixiv-manager-portable-linux');
|
|
exeName = 'pixiv-manager';
|
|
exePath = path.join(distDir, exeName);
|
|
} else if (platform === 'macos') {
|
|
portableDir = path.join(__dirname, '..', 'pixiv-manager-portable-macos');
|
|
exeName = 'pixiv-manager';
|
|
exePath = path.join(distDir, exeName);
|
|
}
|
|
|
|
try {
|
|
// 清理之前的便携版
|
|
await fs.remove(portableDir);
|
|
await fs.ensureDir(portableDir);
|
|
|
|
// 复制可执行文件
|
|
if (await fs.pathExists(exePath)) {
|
|
await fs.copy(exePath, path.join(portableDir, exeName));
|
|
}
|
|
|
|
// 创建README
|
|
let executableInstructions = '';
|
|
if (platform === 'linux') {
|
|
executableInstructions = `1. 添加执行权限: \`chmod +x pixiv-manager-linux\`
|
|
2. 运行程序: \`./pixiv-manager-linux\``;
|
|
} else if (platform === 'macos') {
|
|
executableInstructions = `1. 添加执行权限: \`chmod +x pixiv-manager-macos\`
|
|
2. 运行程序: \`./pixiv-manager-macos\``;
|
|
} else {
|
|
executableInstructions = `1. 双击 \`pixiv-manager.exe\` 启动程序`;
|
|
}
|
|
|
|
const readme = `# Pixiv Manager 便携版
|
|
|
|
## 使用说明
|
|
|
|
${executableInstructions}
|
|
${platform === 'win' ? '' : '3. '}在浏览器中访问 http://localhost:3000
|
|
${platform === 'win' ? '3' : '4'}. 按 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);
|
|
}
|
|
}
|
|
|
|
// 获取命令行参数
|
|
const platform = process.argv[2] || 'win';
|
|
createPortable(platform); |