UNPKG

mentorix-cli

Version:

Mentorix CLI by UTP Xpedition

91 lines (76 loc) 3.51 kB
#!/usr/bin/env node const fs = require('fs'); const path = require('path'); const { execSync } = require('child_process'); const { program } = require('commander'); const degit = require('degit'); // Cargar el package.json de mentorix-cli const packageJsonPath = path.join(__dirname, '../package.json'); const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); // Define la versión del CLI y la versión de mentorix const CLI_VERSION = packageJson.version; const MENTORIX_VERSION = '1.0.0-beta.7'; const TEMPLATE_REPO = 'NoeLopez/mentorix-template'; program .name('mentorix-cli') .version(CLI_VERSION, '-v, --version', 'Muestra la versión actual del CLI') .description('CLI para crear proyectos basados en el meta-framework MentorixJS'); // Comando para crear un nuevo proyecto program .command('new <nombre-proyecto>') .description('Crear un nuevo proyecto basado en Mentorix') .action(async (nombreProyecto) => { const projectDir = path.join(process.cwd(), nombreProyecto); console.log(`Creando nuevo proyecto de Mentorix: ${nombreProyecto}`); // Clona la plantilla desde el repositorio usando `degit` const emitter = degit(TEMPLATE_REPO, { force: true }); try { await emitter.clone(projectDir); console.log("Configuración de proyecto terminado correctamente."); // Personalizar el package.json del proyecto generado const packageJsonPath = path.join(projectDir, 'package.json'); if (fs.existsSync(packageJsonPath)) { const projectPackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); projectPackageJson.name = nombreProyecto; projectPackageJson.description = `${nombreProyecto} creado con Mentorix de UTP Xpedition`; fs.writeFileSync(packageJsonPath, JSON.stringify(projectPackageJson, null, 2)); console.log("Configuración de package.json completada."); } else { console.error("Error: No se encontró package.json en la plantilla."); return; } // Instala las dependencias usando Yarn installMentorixWithYarn(projectDir); } catch (error) { console.error("Error al configurar el proyecto:", error); } }); // Función para instalar mentorix como dependencia en el proyecto function installMentorixWithYarn(projectDir) { console.log(`Instalando mentorix v${MENTORIX_VERSION} usando Yarn...`); try { execSync(`yarn install`, { stdio: 'inherit', cwd: projectDir }); console.log("Mentorix y sus dependencias han sido instaladas exitosamente."); } catch (error) { console.error("Error al instalar Mentorix:", error); } } // Comando para mostrar ayuda explícita program .command('help') .description('Mostrar información de ayuda sobre el CLI de Mentorix') .action(() => { program.outputHelp(); }); // Manejo de comandos desconocidos program.on('command:*', (operands) => { console.error(`\nError: Comando desconocido '${operands[0]}'`); console.log(`\nSi necesitas ayuda, ejecuta 'mentorix-cli help' para ver los comandos disponibles.\n`); program.outputHelp(); }); // Muestra la ayuda si no se especifica ningún comando if (!process.argv.slice(2).length) { program.outputHelp(); } // Parsear los argumentos ingresados por el usuario program.parse(process.argv);