UNPKG

nsgm-cli

Version:

A CLI tool to run Next/Style-components and Graphql/Mysql fullstack project

116 lines (115 loc) 4.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.initCommand = void 0; const parser_1 = require("../parser"); const utils_1 = require("../utils"); const generate_1 = require("../../generate"); exports.initCommand = { name: "init", aliases: ["-i", "--init"], description: "初始化 NSGM 项目", usage: "nsgm init [dictionary] [options]", examples: ["nsgm init", "nsgm init myproject", "nsgm init --dictionary=myproject"], options: [ { name: "dictionary", description: "项目目录", default: ".", type: "string", }, { name: "interactive", description: "使用交互式向导", default: true, type: "boolean", }, ], execute: async (options) => { try { let projectConfig; // 智能判断是否使用交互模式:如果用户提供了 dictionary 参数且不是默认值,则自动使用非交互模式 if (options.dictionary && options.dictionary !== ".") { options.interactive = false; } // 如果启用交互模式 if (options.interactive) { const wizardResult = await utils_1.Prompt.initWizard(); utils_1.Console.separator(); utils_1.Console.title("📋 项目配置确认"); utils_1.Console.info(`项目目录: ${wizardResult.projectName}`); utils_1.Console.info(`项目描述: ${wizardResult.description}`); utils_1.Console.info(`作者: ${wizardResult.author}`); utils_1.Console.info(`数据库: ${wizardResult.database ? "是" : "否"}`); utils_1.Console.info(`功能: ${wizardResult.features.join(", ")}`); utils_1.Console.separator(); const confirmed = await utils_1.Prompt.confirm("确认创建项目?", true); if (!confirmed) { utils_1.Console.warning("项目创建已取消"); process.exit(0); } options.dictionary = wizardResult.projectName; projectConfig = wizardResult; } const finalOptions = parser_1.ArgumentParser.applyDefaults(options, { dictionary: ".", }); // 检查是否需要跳过初始化(保持原有逻辑) let initFlag = true; const argvArr = process.argv; const argvArrLen = argvArr.length; let fileName = ""; if (argvArrLen > 2) { fileName = argvArr[2]; } else if (argvArrLen > 1) { fileName = argvArr[1]; } if (fileName !== "") { if (fileName.indexOf("\\") !== -1) { fileName = fileName.replace(/\\/g, "/"); } const fileNameArr = fileName.split("/"); const fileNameArrLen = fileNameArr.length; const fileNameStr = fileNameArr[fileNameArrLen - 1]; if (fileNameStr === "app") { initFlag = false; } for (const item of fileNameArr) { if (item === "pm2") { initFlag = false; break; } } } if (initFlag) { const spinner = utils_1.Console.spinner("正在初始化项目...", "cyan"); spinner.start(); try { await new Promise((resolve) => setTimeout(resolve, 1000)); // 模拟初始化时间 (0, generate_1.initFiles)(finalOptions.dictionary || ".", false, projectConfig); spinner.succeed(`项目初始化完成! 目录: ${finalOptions.dictionary}`); utils_1.Console.newLine(); utils_1.Console.box(`项目已成功创建到 ${finalOptions.dictionary} 目录\n\n` + `下一步:\n` + `1. cd ${finalOptions.dictionary}\n` + `2. npm run dev\n\n` + `默认登录账号: admin/admin123\n` + `如需修改密码: npm run generate-password yourNewPassword\n` + `然后修改 .env 中的 LOGIN_PASSWORD_HASH`, "success"); } catch (error) { spinner.fail("项目初始化失败"); throw error; } } else { utils_1.Console.warning("跳过初始化(检测到特殊环境)"); } process.exit(0); } catch (error) { utils_1.Console.error(`初始化失败: ${error}`); process.exit(1); } }, };