UNPKG

nsgm-cli

Version:

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

116 lines (115 loc) 4.95 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. cp .env.example .env\n` + `3. npm run generate-password yourPassword\n` + `4. modify .env LOGIN_PASSWORD_HASH=yourEncryptedPassword\n` + `5. npm run dev`, '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); } }, };