mentorix-cli
Version:
Mentorix CLI by UTP Xpedition
91 lines (76 loc) • 3.51 kB
JavaScript
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);