Ejercicio: npm y package.json
Objetivo
Montar un proyecto real con npm (instalar un paquete, crear scripts y un .gitignore) y escribir cinco funciones que manipulan un package.json y comparan versiones.
Cómo se trabaja
La parte A se hace en tu terminal. La parte B son funciones de JavaScript puro que puedes probar aquí y comprobar en el navegador. Pega solo las funciones, sin <script>.
Pasos
Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.
💡 Pista 1: comparar números, no textos
Convierte cada parte con Number. Como texto, "10" es menor que "9"; como número no.
💡 Pista 2: aceptaCaret
Quita el ^ con rango.replace("^", ""). Debe cumplirse: mismo MAYOR y compararVersiones(version, base) >= 0.
💡 Pista 3: no mutar
Con propagación: { ...pkg, scripts: { ...pkg.scripts, [nombre]: comando } }. Si pkg.scripts no existe, propagar undefined no da error.
🔎 Comprueba tu trabajo
Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista. Pega solo el JavaScript, sin las etiquetas <script>.
✅ Ver una solución posible
Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.
function listarScripts(texto) {
const pkg = JSON.parse(texto);
return Object.entries(pkg.scripts || {}).map(
([nombre, comando]) => `${nombre}: ${comando}`
);
}
function contarDependencias(pkg) {
const normales = Object.keys(pkg.dependencies || {}).length;
const desarrollo = Object.keys(pkg.devDependencies || {}).length;
return normales + desarrollo;
}
function compararVersiones(a, b) {
const x = a.split(".").map(Number);
const y = b.split(".").map(Number);
for (let i = 0; i < 3; i++) {
if (x[i] > y[i]) return 1;
if (x[i] < y[i]) return -1;
}
return 0;
}
function aceptaCaret(rango, version) {
const base = rango.replace("^", "");
const mismoMayor = base.split(".")[0] === version.split(".")[0];
return mismoMayor && compararVersiones(version, base) >= 0;
}
function agregarScript(pkg, nombre, comando) {
return { ...pkg, scripts: { ...pkg.scripts, [nombre]: comando } };
}
💡 🏁 Reto extra (opcional)
Escribe actualizarMenor(rango) que reciba "^1.2.0" y devuelva "^1.3.0" (sube el número MENOR en uno y pone el PARCHE a 0).