Files
Docker-Proxy/hubcmdui/scripts/auto-setup.js

118 lines
3.4 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
const { isDatabaseReady, getDatabaseStats } = require('../utils/database-checker');
// 检查是否需要安装依赖
function needsInstall() {
const nodeModulesPath = path.join(process.cwd(), 'node_modules');
const packageLockPath = path.join(process.cwd(), 'package-lock.json');
if (!fs.existsSync(nodeModulesPath)) {
return true;
}
// 检查package.json是否比package-lock.json新
const packageJsonPath = path.join(process.cwd(), 'package.json');
if (fs.existsSync(packageJsonPath) && fs.existsSync(packageLockPath)) {
const packageStat = fs.statSync(packageJsonPath);
const lockStat = fs.statSync(packageLockPath);
if (packageStat.mtime > lockStat.mtime) {
return true;
}
}
return false;
}
// 检查是否需要初始化数据库
async function needsInit() {
const dataDir = path.join(process.cwd(), 'data');
// 如果data目录不存在需要初始化
if (!fs.existsSync(dataDir)) {
return true;
}
// 使用专门的数据库检查器
const isReady = await isDatabaseReady();
return !isReady;
}
// 执行命令并显示输出
function runCommand(command, description) {
console.log(`\n🔄 ${description}...`);
try {
execSync(command, { stdio: 'inherit', cwd: process.cwd() });
console.log(`${description}完成`);
return true;
} catch (error) {
console.error(`${description}失败:`, error.message);
return false;
}
}
async function autoSetup() {
console.log('🚀 HubCmdUI 自动设置检查...\n');
let needsSetup = false;
// 检查是否需要安装依赖
if (needsInstall()) {
console.log('📦 检测到需要安装依赖包');
needsSetup = true;
if (!runCommand('npm install', '安装依赖包')) {
process.exit(1);
}
} else {
console.log('✅ 依赖包已安装');
}
// 检查是否需要初始化
const needsInitialization = await needsInit();
if (needsInitialization) {
console.log('🗄️ 检测到需要初始化数据库');
needsSetup = true;
if (!runCommand('node scripts/init-complete.js', '初始化SQLite数据库')) {
process.exit(1);
}
} else {
console.log('✅ 数据库已初始化');
}
if (needsSetup) {
console.log('\n🎉 系统设置完成!正在启动服务...\n');
} else {
console.log('\n🎯 系统已就绪,正在启动服务...\n');
}
// 启动服务器
console.log('🌐 启动 HubCmdUI 服务器...');
console.log('📍 访问地址: http://localhost:3000');
console.log('🔧 管理面板: http://localhost:3000/admin');
console.log('👤 默认账户: root / admin@123\n');
// 启动主服务器
try {
require('../server.js');
} catch (error) {
console.error('❌ 服务器启动失败:', error.message);
console.error('💡 尝试运行: npm run init 重新初始化');
process.exit(1);
}
}
// 如果直接运行此脚本
if (require.main === module) {
autoSetup().catch(error => {
console.error('❌ 自动设置失败:', error.message);
process.exit(1);
});
}
module.exports = { autoSetup, needsInstall, needsInit };