litepath
Version:
Microframework ligero para Node.js
76 lines (61 loc) • 2.16 kB
JavaScript
import fs from 'fs-extra';
import path from 'path';
import { fileURLToPath } from 'url';
// Obtenemos la ruta del archivo actual
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const args = process.argv.slice(2);
if (args[0] === 'create') {
const projectName = args[1];
if (!projectName) {
console.error('Debes especificar un nombre para el proyecto.');
process.exit(1);
}
const projectPath = path.join(process.cwd(), projectName);
if (fs.existsSync(projectPath)) {
console.error(`La carpeta ${projectName} ya existe.`);
process.exit(1);
}
console.log('📂 Copiando estructura...');
// Carpeta del paquete global de LitePath
const sourcePath = path.resolve(__dirname);
try {
// Copiamos todos los archivos y carpetas del paquete hacia el proyecto
fs.copySync(sourcePath, projectPath, {
filter: (src) => {
// Opcional: no copiar node_modules si existiera
return !src.includes('node_modules');
},
});
console.log(`✅ Proyecto creado en ${projectPath}`);
console.log('Para iniciarlo:');
console.log(` cd ${projectName}`);
console.log(` node app.js`);
} catch (err) {
console.error('❌ Error al crear el proyecto:', err);
process.exit(1);
}
process.exit(0);
}
// Si no es "create", podemos arrancar un servidor de ejemplo
import LitePath from './litepath.js';
const app = new LitePath();
// Middleware simple de logging
app.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.path}`);
next();
});
// Carpeta de archivos estáticos
app.serveStatic('./public');
// Arranca el servidor
const PORT = process.env.PORT || 3001;
app.listen(PORT, () => console.log(`Servidor LitePath corriendo en http://localhost:${PORT}`));
// Manejo básico de errores
app.onError = (err) => {
if (err.code === 'EADDRINUSE') {
console.error(`Puerto ${PORT} en uso. Usa otro puerto con PORT=<puerto> litepath`);
} else {
console.error('Error del servidor:', err);
}
};