[{"data":1,"prerenderedAt":2555},["ShallowReactive",2],{"es-main-blog_es-\u002Fes\u002Fblog\u002Finstall-node-24-on-ubuntu-24\u002F":3,"es-alternative-blog_en-\u002Fblog\u002Finstall-node-24-on-ubuntu-24":1416,"blog_es-related-\u002Fes\u002Fblog\u002Finstall-node-24-on-ubuntu-24\u002F":2503},{"id":4,"title":5,"body":6,"date":1400,"description":1401,"extension":1402,"image":1403,"meta":1404,"navigation":537,"path":1405,"readingTime":1406,"schemaOrg":1403,"seo":1407,"stem":1408,"tags":1409,"toc":1413,"updatedAt":1414,"__hash__":1415},"blog_es\u002Fes\u002Fblog\u002F0002.install-node-24-on-ubuntu-24.md","Instalar Node.js 24 en Ubuntu 24.04",{"type":7,"value":8,"toc":1388},"minimark",[9,19,35,38,43,55,58,90,98,104,132,136,139,144,147,180,189,217,221,224,243,254,258,267,299,314,335,339,354,357,372,381,385,397,428,432,435,1361,1365,1373,1384],[10,11,12,13,18],"p",{},"Instalar Node.js 24 en Ubuntu 24 debería ser un proceso sencillo. Aunque Ubuntu incluye una versión de Node.js en sus repositorios por defecto, es posible que quieras utilizar una versión más reciente, como Node.js 24, que es LTS desde el 28 de octubre de 2025 y tiene soporte hasta abril de 2028. Si vas a instalarlo desde cero, mejor ",[14,15,17],"a",{"href":16},"\u002Fes\u002Fblog\u002Fapt-install-node-26-on-ubuntu-26\u002F","instala Node.js 26 en Ubuntu 26.04",". En esta guía te enseño dos métodos para que lo tengas listo rápidamente.",[10,20,21,22,28,29,34],{},"Veremos un script de una sola línea que lo automatiza todo, incluyendo la configuración de npm necesaria para instalar herramientas globales sin permisos de administrador y la activación de ",[14,23,27],{"href":24,"rel":25},"https:\u002F\u002Fyarnpkg.com\u002F",[26],"nofollow","Yarn"," y ",[14,30,33],{"href":31,"rel":32},"https:\u002F\u002Fpnpm.io\u002F",[26],"pnpm"," usando Corepack.",[10,36,37],{},"Si quieres personalizar la instalación, también veremos cómo hacerlo paso a paso.",[39,40,42],"h2",{"id":41},"la-vía-fácil","La vía fácil",[10,44,45,46,50,51,54],{},"Si tienes prisa, puedes instalarlo todo con un solo comando. He preparado un script que se encargará de instalar Node.js 24, configurar npm (para que no necesites ",[47,48,49],"code",{},"sudo"," al instalar paquetes globales) y, opcionalmente, habilitar ",[47,52,53],{},"corepack"," (para Yarn y pnpm) e instalar Bun.",[10,56,57],{},"Abre la terminal y ejecuta:",[59,60,65],"pre",{"className":61,"code":62,"language":63,"meta":64,"style":64},"language-bash shiki shiki-themes catppuccin-latte catppuccin-mocha","curl -fsSL https:\u002F\u002Fangelblanco.dev\u002Fscripts\u002Fubuntu-install-node-24.sh | bash\n","bash","",[47,66,67],{"__ignoreMap":64},[68,69,72,76,80,83,87],"span",{"class":70,"line":71},"line",1,[68,73,75],{"class":74},"sMmZK","curl",[68,77,79],{"class":78},"sgueU"," -fsSL",[68,81,82],{"class":78}," https:\u002F\u002Fangelblanco.dev\u002Fscripts\u002Fubuntu-install-node-24.sh",[68,84,86],{"class":85},"sjJjI"," |",[68,88,89],{"class":74}," bash\n",[10,91,92,93,97],{},"El script te pedirá confirmación en cada paso importante, así que seguirás teniendo el control sobre lo que se instala. Por supuesto, puedes revisar el ",[14,94,96],{"href":95},"#el-script","contenido completo del script en este post",", o en la propia URL antes de ejecutarlo.",[10,99,100,101,103],{},"Si no tienes ",[47,102,75],{}," instalado:",[59,105,107],{"className":61,"code":106,"language":63,"meta":64,"style":64},"sudo apt update\nsudo apt install curl\n",[47,108,109,119],{"__ignoreMap":64},[68,110,111,113,116],{"class":70,"line":71},[68,112,49],{"class":74},[68,114,115],{"class":78}," apt",[68,117,118],{"class":78}," update\n",[68,120,122,124,126,129],{"class":70,"line":121},2,[68,123,49],{"class":74},[68,125,115],{"class":78},[68,127,128],{"class":78}," install",[68,130,131],{"class":78}," curl\n",[39,133,135],{"id":134},"la-guía-paso-a-paso","La guía paso a paso",[10,137,138],{},"Para quienes prefieren un enfoque más manual, aquí tienes un desglose de lo que hace el script. Puedes seguir estos pasos para realizar la instalación por tu cuenta.",[140,141,143],"h3",{"id":142},"_1-actualizar-dependencias-y-añadir-el-repositorio-de-nodesource","1. Actualizar dependencias y añadir el repositorio de NodeSource",[10,145,146],{},"Primero, tenemos que asegurarnos de que nuestro sistema tiene las herramientas necesarias para descargar e instalar Node.js.",[59,148,150],{"className":61,"code":149,"language":63,"meta":64,"style":64},"sudo apt update\nsudo apt install -y ca-certificates curl gnupg\n",[47,151,152,160],{"__ignoreMap":64},[68,153,154,156,158],{"class":70,"line":71},[68,155,49],{"class":74},[68,157,115],{"class":78},[68,159,118],{"class":78},[68,161,162,164,166,168,171,174,177],{"class":70,"line":121},[68,163,49],{"class":74},[68,165,115],{"class":78},[68,167,128],{"class":78},[68,169,170],{"class":78}," -y",[68,172,173],{"class":78}," ca-certificates",[68,175,176],{"class":78}," curl",[68,178,179],{"class":78}," gnupg\n",[10,181,182,183,188],{},"A continuación, añadiremos el repositorio de ",[14,184,187],{"href":185,"rel":186},"https:\u002F\u002Fnodesource.com\u002F",[26],"NodeSource",", que es una fuente de confianza para obtener versiones actualizadas de Node.js en Debian y Ubuntu.",[59,190,192],{"className":61,"code":191,"language":63,"meta":64,"style":64},"curl -fsSL https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_24.x | sudo -E bash -\n",[47,193,194],{"__ignoreMap":64},[68,195,196,198,200,203,205,208,211,214],{"class":70,"line":71},[68,197,75],{"class":74},[68,199,79],{"class":78},[68,201,202],{"class":78}," https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_24.x",[68,204,86],{"class":85},[68,206,207],{"class":74}," sudo",[68,209,210],{"class":78}," -E",[68,212,213],{"class":78}," bash",[68,215,216],{"class":78}," -\n",[140,218,220],{"id":219},"_2-instalar-nodejs-y-npm","2. Instalar Node.js y npm",[10,222,223],{},"Con el repositorio ya configurado, instalar Node.js es tan sencillo como ejecutar:",[59,225,227],{"className":61,"code":226,"language":63,"meta":64,"style":64},"sudo apt-get install -y nodejs\n",[47,228,229],{"__ignoreMap":64},[68,230,231,233,236,238,240],{"class":70,"line":71},[68,232,49],{"class":74},[68,234,235],{"class":78}," apt-get",[68,237,128],{"class":78},[68,239,170],{"class":78},[68,241,242],{"class":78}," nodejs\n",[10,244,245,246,249,250,253],{},"Este comando instala tanto el entorno de ejecución ",[47,247,248],{},"node"," como el gestor de paquetes ",[47,251,252],{},"npm",".",[140,255,257],{"id":256},"_3-configurar-el-prefijo-global-de-npm","3. Configurar el prefijo global de npm",[10,259,260,261,263,264,266],{},"Por defecto, ",[47,262,252],{}," instala los paquetes globales en un directorio del sistema que requiere ",[47,265,49],{},". Esto puede provocar problemas de permisos más adelante. Para evitarlo, es una buena práctica configurar un directorio local para tus paquetes globales.",[59,268,270],{"className":61,"code":269,"language":63,"meta":64,"style":64},"mkdir -p ~\u002F.npm-global\nnpm config set prefix '~\u002F.npm-global'\n",[47,271,272,283],{"__ignoreMap":64},[68,273,274,277,280],{"class":70,"line":71},[68,275,276],{"class":74},"mkdir",[68,278,279],{"class":78}," -p",[68,281,282],{"class":78}," ~\u002F.npm-global\n",[68,284,285,287,290,293,296],{"class":70,"line":121},[68,286,252],{"class":74},[68,288,289],{"class":78}," config",[68,291,292],{"class":78}," set",[68,294,295],{"class":78}," prefix",[68,297,298],{"class":78}," '~\u002F.npm-global'\n",[10,300,301,302,305,306,309,310,313],{},"También necesitarás añadir este directorio a tu ",[47,303,304],{},"PATH",". Abre tu fichero ",[47,307,308],{},"~\u002F.bashrc"," o ",[47,311,312],{},"~\u002F.zshrc"," y añade la siguiente línea:",[59,315,317],{"className":61,"code":316,"language":63,"meta":64,"style":64},"export PATH=~\u002F.npm-global\u002Fbin:$PATH\n",[47,318,319],{"__ignoreMap":64},[68,320,321,325,329,332],{"class":70,"line":71},[68,322,324],{"class":323},"sAS4m","export",[68,326,328],{"class":327},"s0aCy"," PATH",[68,330,331],{"class":85},"=~",[68,333,334],{"class":327},"\u002F.npm-global\u002Fbin:$PATH\n",[140,336,338],{"id":337},"_4-habilitar-corepack-para-yarn-y-pnpm","4. Habilitar Corepack (para Yarn y pnpm)",[10,340,341,346,347,309,350,353],{},[14,342,345],{"href":343,"rel":344},"https:\u002F\u002Fnodejs.org\u002Fdocs\u002Flatest-v24.x\u002Fapi\u002Fcorepack.html",[26],"Corepack"," es una herramienta experimental incluida con Node.js que simplifica la gestión de diferentes gestores de paquetes. Con ella, no necesitas instalar ",[14,348,27],{"href":24,"rel":349},[26],[14,351,33],{"href":31,"rel":352},[26]," manualmente.",[10,355,356],{},"Para habilitarla, ejecuta:",[59,358,360],{"className":61,"code":359,"language":63,"meta":64,"style":64},"sudo corepack enable\n",[47,361,362],{"__ignoreMap":64},[68,363,364,366,369],{"class":70,"line":71},[68,365,49],{"class":74},[68,367,368],{"class":78}," corepack",[68,370,371],{"class":78}," enable\n",[10,373,374,375,28,378,380],{},"Ahora puedes usar ",[47,376,377],{},"yarn",[47,379,33],{}," en tus proyectos sin pasos de instalación adicionales.",[140,382,384],{"id":383},"_5-instalar-bun-opcional","5. Instalar Bun (opcional)",[10,386,387,392,393,396],{},[14,388,391],{"href":389,"rel":390},"https:\u002F\u002Fbun.sh\u002F",[26],"Bun"," es un toolkit de JavaScript todo en uno y muy rápido que está ganando mucha popularidad. Si quieres probarlo, puedes instalarlo con su script oficial, que necesita ",[47,394,395],{},"unzip",":",[59,398,400],{"className":61,"code":399,"language":63,"meta":64,"style":64},"sudo apt install -y unzip\ncurl -fsSL https:\u002F\u002Fbun.sh\u002Finstall | bash\n",[47,401,402,415],{"__ignoreMap":64},[68,403,404,406,408,410,412],{"class":70,"line":71},[68,405,49],{"class":74},[68,407,115],{"class":78},[68,409,128],{"class":78},[68,411,170],{"class":78},[68,413,414],{"class":78}," unzip\n",[68,416,417,419,421,424,426],{"class":70,"line":121},[68,418,75],{"class":74},[68,420,79],{"class":78},[68,422,423],{"class":78}," https:\u002F\u002Fbun.sh\u002Finstall",[68,425,86],{"class":85},[68,427,89],{"class":74},[39,429,431],{"id":430},"el-script","El script",[10,433,434],{},"Este es el script completo que automatiza los pasos anteriores. Pide confirmación antes de cada paso y borra sus archivos temporales al terminar.",[59,436,439],{"className":61,"code":437,"filename":438,"language":63,"meta":64,"style":64},"#!\u002Fbin\u002Fbash\n#\n# Author: Ángel Blanco\n# License: MIT\n#\n# This script is provided \"as is\", without warranty of any kind. Use at your own risk.\n#\n# Source: https:\u002F\u002Fangelblanco.dev\u002Fblog\u002Finstall-node-24-on-ubuntu-24\n#\n# Usage:\n#   curl -fsSL https:\u002F\u002Fangelblanco.dev\u002Fscripts\u002Fubuntu-install-node-24.sh | bash\n#\n# This script installs Node.js and several package managers.\n# Run it as your non-root user: it asks for elevated permissions\n# with sudo when needed.\n#\n\nset -e\n\n# Basic confirmation module before executing the script.\nconfirm_action() {\n    read -p \"$1 (y\u002Fn): \" choice \u003C \u002Fdev\u002Ftty\n    case \"$choice\" in\n        [Yy]|[Yy][Ee][Ss])\n            return 0\n            ;;\n        [Nn]|[Nn][Oo])\n            return 1\n            ;;\n        *)\n            echo \"Invalid choice. Please enter 'y' or 'n'.\"\n            confirm_action \"$1\"\n            ;;\n    esac\n}\n\n# You can configure these variables if needed\nNODE_VERSION=24\nNPM_PREFIX=\"~\u002F.npm-global\"\nDEPS=\"ca-certificates curl gnupg\"\n\nTMP_DIR=$(mktemp -d)\ntrap 'rm -rf \"$TMP_DIR\"' EXIT\n\necho \"This script will install Node.js and optionally other package managers.\"\necho \"\"\n\nif ! confirm_action \"Install Node.js version $NODE_VERSION?\"; then\n    echo \"Skipping Node.js installation. Exiting.\"\n    exit 0\nfi\n\necho \"Installing the dependencies needed to install Node.js...\"\n\nsudo apt update\nsudo apt install -y $DEPS\n\necho \"Installing Node.js...\"\ncurl -fsSL https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_$NODE_VERSION.x -o $TMP_DIR\u002Fnodesource_setup.sh\nsudo -E bash $TMP_DIR\u002Fnodesource_setup.sh\n\nsudo apt-get install -y nodejs\n\nmkdir -p ~\u002F.npm-global\nnpm config set prefix $NPM_PREFIX\necho \"npm prefix set to $NPM_PREFIX\"\n\necho \"Node.js installation completed.\"\necho \"Node version: \"\nnode --version\n\necho \"\"\n\nif confirm_action \"Enable Yarn and pnpm via corepack?\"; then\n    echo \"Enabling corepack...\"\n    sudo corepack enable\n    echo \"Corepack enabled.\"\n    echo \"Yarn version: \"\n    yarn --version\n    echo \"PNPM version: \"\n    pnpm --version\nfi\n\necho \"\"\n\nif confirm_action \"Install Bun?\"; then\n    echo \"Installing Bun...\"\n    sudo apt install -y unzip\n    curl -fsSL https:\u002F\u002Fbun.sh\u002Finstall | bash\n    export BUN_INSTALL=\"$HOME\u002F.bun\"\n    export PATH=\"$BUN_INSTALL\u002Fbin:$PATH\"\n    echo \"Bun version: \"\n    bun --version\nfi\n\necho \"\"\necho \"Installation process finished.\"\necho \"\"\necho \"Add the global npm bin directory to your PATH by adding this line to your .bashrc or .zshrc:\"\necho 'export PATH=~\u002F.npm-global\u002Fbin:$PATH'\necho \"\"\n","ubuntu-install-node-24.sh",[47,440,441,447,453,459,465,470,476,481,487,492,498,504,509,515,521,527,532,539,549,554,560,573,600,617,653,663,669,694,702,707,713,722,735,740,746,752,757,763,775,786,797,802,821,833,838,847,855,860,887,896,904,910,915,923,928,937,951,956,964,988,1001,1006,1019,1024,1033,1047,1060,1065,1073,1081,1089,1094,1101,1106,1120,1128,1138,1146,1154,1162,1170,1178,1183,1188,1195,1200,1214,1222,1235,1249,1268,1290,1298,1306,1311,1316,1323,1331,1338,1346,1354],{"__ignoreMap":64},[68,442,443],{"class":70,"line":71},[68,444,446],{"class":445},"skWWU","#!\u002Fbin\u002Fbash\n",[68,448,449],{"class":70,"line":121},[68,450,452],{"class":451},"som-u","#\n",[68,454,456],{"class":70,"line":455},3,[68,457,458],{"class":451},"# Author: Ángel Blanco\n",[68,460,462],{"class":70,"line":461},4,[68,463,464],{"class":451},"# License: MIT\n",[68,466,468],{"class":70,"line":467},5,[68,469,452],{"class":451},[68,471,473],{"class":70,"line":472},6,[68,474,475],{"class":451},"# This script is provided \"as is\", without warranty of any kind. Use at your own risk.\n",[68,477,479],{"class":70,"line":478},7,[68,480,452],{"class":451},[68,482,484],{"class":70,"line":483},8,[68,485,486],{"class":451},"# Source: https:\u002F\u002Fangelblanco.dev\u002Fblog\u002Finstall-node-24-on-ubuntu-24\n",[68,488,490],{"class":70,"line":489},9,[68,491,452],{"class":451},[68,493,495],{"class":70,"line":494},10,[68,496,497],{"class":451},"# Usage:\n",[68,499,501],{"class":70,"line":500},11,[68,502,503],{"class":451},"#   curl -fsSL https:\u002F\u002Fangelblanco.dev\u002Fscripts\u002Fubuntu-install-node-24.sh | bash\n",[68,505,507],{"class":70,"line":506},12,[68,508,452],{"class":451},[68,510,512],{"class":70,"line":511},13,[68,513,514],{"class":451},"# This script installs Node.js and several package managers.\n",[68,516,518],{"class":70,"line":517},14,[68,519,520],{"class":451},"# Run it as your non-root user: it asks for elevated permissions\n",[68,522,524],{"class":70,"line":523},15,[68,525,526],{"class":451},"# with sudo when needed.\n",[68,528,530],{"class":70,"line":529},16,[68,531,452],{"class":451},[68,533,535],{"class":70,"line":534},17,[68,536,538],{"emptyLinePlaceholder":537},true,"\n",[68,540,542,546],{"class":70,"line":541},18,[68,543,545],{"class":544},"s-0VM","set",[68,547,548],{"class":78}," -e\n",[68,550,552],{"class":70,"line":551},19,[68,553,538],{"emptyLinePlaceholder":537},[68,555,557],{"class":70,"line":556},20,[68,558,559],{"class":451},"# Basic confirmation module before executing the script.\n",[68,561,563,566,570],{"class":70,"line":562},21,[68,564,565],{"class":74},"confirm_action",[68,567,569],{"class":568},"sxyLT","()",[68,571,572],{"class":568}," {\n",[68,574,576,579,581,584,588,591,594,597],{"class":70,"line":575},22,[68,577,578],{"class":544},"    read",[68,580,279],{"class":78},[68,582,583],{"class":78}," \"",[68,585,587],{"class":586},"s2f33","$1",[68,589,590],{"class":78}," (y\u002Fn): \"",[68,592,593],{"class":78}," choice",[68,595,596],{"class":85}," \u003C",[68,598,599],{"class":78}," \u002Fdev\u002Ftty\n",[68,601,603,606,608,611,614],{"class":70,"line":602},23,[68,604,605],{"class":323},"    case",[68,607,583],{"class":78},[68,609,610],{"class":327},"$choice",[68,612,613],{"class":78},"\"",[68,615,616],{"class":323}," in\n",[68,618,620,623,626,629,632,635,637,640,643,645,648,650],{"class":70,"line":619},24,[68,621,622],{"class":568},"        [",[68,624,625],{"class":78},"Yy",[68,627,628],{"class":568},"]",[68,630,631],{"class":568},"|",[68,633,634],{"class":568},"[",[68,636,625],{"class":78},[68,638,639],{"class":568},"][",[68,641,642],{"class":78},"Ee",[68,644,639],{"class":568},[68,646,647],{"class":78},"Ss",[68,649,628],{"class":568},[68,651,652],{"class":85},")\n",[68,654,656,659],{"class":70,"line":655},25,[68,657,658],{"class":323},"            return",[68,660,662],{"class":661},"st0oN"," 0\n",[68,664,666],{"class":70,"line":665},26,[68,667,668],{"class":568},"            ;;\n",[68,670,672,674,677,679,681,683,685,687,690,692],{"class":70,"line":671},27,[68,673,622],{"class":568},[68,675,676],{"class":78},"Nn",[68,678,628],{"class":568},[68,680,631],{"class":568},[68,682,634],{"class":568},[68,684,676],{"class":78},[68,686,639],{"class":568},[68,688,689],{"class":78},"Oo",[68,691,628],{"class":568},[68,693,652],{"class":85},[68,695,697,699],{"class":70,"line":696},28,[68,698,658],{"class":323},[68,700,701],{"class":661}," 1\n",[68,703,705],{"class":70,"line":704},29,[68,706,668],{"class":568},[68,708,710],{"class":70,"line":709},30,[68,711,712],{"class":85},"        *)\n",[68,714,716,719],{"class":70,"line":715},31,[68,717,718],{"class":544},"            echo",[68,720,721],{"class":78}," \"Invalid choice. Please enter 'y' or 'n'.\"\n",[68,723,725,728,730,732],{"class":70,"line":724},32,[68,726,727],{"class":74},"            confirm_action",[68,729,583],{"class":78},[68,731,587],{"class":586},[68,733,734],{"class":78},"\"\n",[68,736,738],{"class":70,"line":737},33,[68,739,668],{"class":568},[68,741,743],{"class":70,"line":742},34,[68,744,745],{"class":323},"    esac\n",[68,747,749],{"class":70,"line":748},35,[68,750,751],{"class":568},"}\n",[68,753,755],{"class":70,"line":754},36,[68,756,538],{"emptyLinePlaceholder":537},[68,758,760],{"class":70,"line":759},37,[68,761,762],{"class":451},"# You can configure these variables if needed\n",[68,764,766,769,772],{"class":70,"line":765},38,[68,767,768],{"class":327},"NODE_VERSION",[68,770,771],{"class":85},"=",[68,773,774],{"class":78},"24\n",[68,776,778,781,783],{"class":70,"line":777},39,[68,779,780],{"class":327},"NPM_PREFIX",[68,782,771],{"class":85},[68,784,785],{"class":78},"\"~\u002F.npm-global\"\n",[68,787,789,792,794],{"class":70,"line":788},40,[68,790,791],{"class":327},"DEPS",[68,793,771],{"class":85},[68,795,796],{"class":78},"\"ca-certificates curl gnupg\"\n",[68,798,800],{"class":70,"line":799},41,[68,801,538],{"emptyLinePlaceholder":537},[68,803,805,808,810,813,816,819],{"class":70,"line":804},42,[68,806,807],{"class":327},"TMP_DIR",[68,809,771],{"class":85},[68,811,812],{"class":568},"$(",[68,814,815],{"class":74},"mktemp",[68,817,818],{"class":78}," -d",[68,820,652],{"class":568},[68,822,824,827,830],{"class":70,"line":823},43,[68,825,826],{"class":544},"trap",[68,828,829],{"class":78}," 'rm -rf \"$TMP_DIR\"'",[68,831,832],{"class":78}," EXIT\n",[68,834,836],{"class":70,"line":835},44,[68,837,538],{"emptyLinePlaceholder":537},[68,839,841,844],{"class":70,"line":840},45,[68,842,843],{"class":544},"echo",[68,845,846],{"class":78}," \"This script will install Node.js and optionally other package managers.\"\n",[68,848,850,852],{"class":70,"line":849},46,[68,851,843],{"class":544},[68,853,854],{"class":78}," \"\"\n",[68,856,858],{"class":70,"line":857},47,[68,859,538],{"emptyLinePlaceholder":537},[68,861,863,866,869,872,875,878,881,884],{"class":70,"line":862},48,[68,864,865],{"class":323},"if",[68,867,868],{"class":85}," !",[68,870,871],{"class":74}," confirm_action",[68,873,874],{"class":78}," \"Install Node.js version ",[68,876,877],{"class":327},"$NODE_VERSION",[68,879,880],{"class":78},"?\"",[68,882,883],{"class":568},";",[68,885,886],{"class":323}," then\n",[68,888,890,893],{"class":70,"line":889},49,[68,891,892],{"class":544},"    echo",[68,894,895],{"class":78}," \"Skipping Node.js installation. Exiting.\"\n",[68,897,899,902],{"class":70,"line":898},50,[68,900,901],{"class":544},"    exit",[68,903,662],{"class":661},[68,905,907],{"class":70,"line":906},51,[68,908,909],{"class":323},"fi\n",[68,911,913],{"class":70,"line":912},52,[68,914,538],{"emptyLinePlaceholder":537},[68,916,918,920],{"class":70,"line":917},53,[68,919,843],{"class":544},[68,921,922],{"class":78}," \"Installing the dependencies needed to install Node.js...\"\n",[68,924,926],{"class":70,"line":925},54,[68,927,538],{"emptyLinePlaceholder":537},[68,929,931,933,935],{"class":70,"line":930},55,[68,932,49],{"class":74},[68,934,115],{"class":78},[68,936,118],{"class":78},[68,938,940,942,944,946,948],{"class":70,"line":939},56,[68,941,49],{"class":74},[68,943,115],{"class":78},[68,945,128],{"class":78},[68,947,170],{"class":78},[68,949,950],{"class":327}," $DEPS\n",[68,952,954],{"class":70,"line":953},57,[68,955,538],{"emptyLinePlaceholder":537},[68,957,959,961],{"class":70,"line":958},58,[68,960,843],{"class":544},[68,962,963],{"class":78}," \"Installing Node.js...\"\n",[68,965,967,969,971,974,976,979,982,985],{"class":70,"line":966},59,[68,968,75],{"class":74},[68,970,79],{"class":78},[68,972,973],{"class":78}," https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_",[68,975,877],{"class":327},[68,977,978],{"class":78},".x",[68,980,981],{"class":78}," -o",[68,983,984],{"class":327}," $TMP_DIR",[68,986,987],{"class":78},"\u002Fnodesource_setup.sh\n",[68,989,991,993,995,997,999],{"class":70,"line":990},60,[68,992,49],{"class":74},[68,994,210],{"class":78},[68,996,213],{"class":78},[68,998,984],{"class":327},[68,1000,987],{"class":78},[68,1002,1004],{"class":70,"line":1003},61,[68,1005,538],{"emptyLinePlaceholder":537},[68,1007,1009,1011,1013,1015,1017],{"class":70,"line":1008},62,[68,1010,49],{"class":74},[68,1012,235],{"class":78},[68,1014,128],{"class":78},[68,1016,170],{"class":78},[68,1018,242],{"class":78},[68,1020,1022],{"class":70,"line":1021},63,[68,1023,538],{"emptyLinePlaceholder":537},[68,1025,1027,1029,1031],{"class":70,"line":1026},64,[68,1028,276],{"class":74},[68,1030,279],{"class":78},[68,1032,282],{"class":78},[68,1034,1036,1038,1040,1042,1044],{"class":70,"line":1035},65,[68,1037,252],{"class":74},[68,1039,289],{"class":78},[68,1041,292],{"class":78},[68,1043,295],{"class":78},[68,1045,1046],{"class":327}," $NPM_PREFIX\n",[68,1048,1050,1052,1055,1058],{"class":70,"line":1049},66,[68,1051,843],{"class":544},[68,1053,1054],{"class":78}," \"npm prefix set to ",[68,1056,1057],{"class":327},"$NPM_PREFIX",[68,1059,734],{"class":78},[68,1061,1063],{"class":70,"line":1062},67,[68,1064,538],{"emptyLinePlaceholder":537},[68,1066,1068,1070],{"class":70,"line":1067},68,[68,1069,843],{"class":544},[68,1071,1072],{"class":78}," \"Node.js installation completed.\"\n",[68,1074,1076,1078],{"class":70,"line":1075},69,[68,1077,843],{"class":544},[68,1079,1080],{"class":78}," \"Node version: \"\n",[68,1082,1084,1086],{"class":70,"line":1083},70,[68,1085,248],{"class":74},[68,1087,1088],{"class":78}," --version\n",[68,1090,1092],{"class":70,"line":1091},71,[68,1093,538],{"emptyLinePlaceholder":537},[68,1095,1097,1099],{"class":70,"line":1096},72,[68,1098,843],{"class":544},[68,1100,854],{"class":78},[68,1102,1104],{"class":70,"line":1103},73,[68,1105,538],{"emptyLinePlaceholder":537},[68,1107,1109,1111,1113,1116,1118],{"class":70,"line":1108},74,[68,1110,865],{"class":323},[68,1112,871],{"class":74},[68,1114,1115],{"class":78}," \"Enable Yarn and pnpm via corepack?\"",[68,1117,883],{"class":568},[68,1119,886],{"class":323},[68,1121,1123,1125],{"class":70,"line":1122},75,[68,1124,892],{"class":544},[68,1126,1127],{"class":78}," \"Enabling corepack...\"\n",[68,1129,1131,1134,1136],{"class":70,"line":1130},76,[68,1132,1133],{"class":74},"    sudo",[68,1135,368],{"class":78},[68,1137,371],{"class":78},[68,1139,1141,1143],{"class":70,"line":1140},77,[68,1142,892],{"class":544},[68,1144,1145],{"class":78}," \"Corepack enabled.\"\n",[68,1147,1149,1151],{"class":70,"line":1148},78,[68,1150,892],{"class":544},[68,1152,1153],{"class":78}," \"Yarn version: \"\n",[68,1155,1157,1160],{"class":70,"line":1156},79,[68,1158,1159],{"class":74},"    yarn",[68,1161,1088],{"class":78},[68,1163,1165,1167],{"class":70,"line":1164},80,[68,1166,892],{"class":544},[68,1168,1169],{"class":78}," \"PNPM version: \"\n",[68,1171,1173,1176],{"class":70,"line":1172},81,[68,1174,1175],{"class":74},"    pnpm",[68,1177,1088],{"class":78},[68,1179,1181],{"class":70,"line":1180},82,[68,1182,909],{"class":323},[68,1184,1186],{"class":70,"line":1185},83,[68,1187,538],{"emptyLinePlaceholder":537},[68,1189,1191,1193],{"class":70,"line":1190},84,[68,1192,843],{"class":544},[68,1194,854],{"class":78},[68,1196,1198],{"class":70,"line":1197},85,[68,1199,538],{"emptyLinePlaceholder":537},[68,1201,1203,1205,1207,1210,1212],{"class":70,"line":1202},86,[68,1204,865],{"class":323},[68,1206,871],{"class":74},[68,1208,1209],{"class":78}," \"Install Bun?\"",[68,1211,883],{"class":568},[68,1213,886],{"class":323},[68,1215,1217,1219],{"class":70,"line":1216},87,[68,1218,892],{"class":544},[68,1220,1221],{"class":78}," \"Installing Bun...\"\n",[68,1223,1225,1227,1229,1231,1233],{"class":70,"line":1224},88,[68,1226,1133],{"class":74},[68,1228,115],{"class":78},[68,1230,128],{"class":78},[68,1232,170],{"class":78},[68,1234,414],{"class":78},[68,1236,1238,1241,1243,1245,1247],{"class":70,"line":1237},89,[68,1239,1240],{"class":74},"    curl",[68,1242,79],{"class":78},[68,1244,423],{"class":78},[68,1246,86],{"class":85},[68,1248,89],{"class":74},[68,1250,1252,1255,1258,1260,1262,1265],{"class":70,"line":1251},90,[68,1253,1254],{"class":323},"    export",[68,1256,1257],{"class":327}," BUN_INSTALL",[68,1259,771],{"class":85},[68,1261,613],{"class":78},[68,1263,1264],{"class":327},"$HOME",[68,1266,1267],{"class":78},"\u002F.bun\"\n",[68,1269,1271,1273,1275,1277,1279,1282,1285,1288],{"class":70,"line":1270},91,[68,1272,1254],{"class":323},[68,1274,328],{"class":327},[68,1276,771],{"class":85},[68,1278,613],{"class":78},[68,1280,1281],{"class":327},"$BUN_INSTALL",[68,1283,1284],{"class":78},"\u002Fbin:",[68,1286,1287],{"class":327},"$PATH",[68,1289,734],{"class":78},[68,1291,1293,1295],{"class":70,"line":1292},92,[68,1294,892],{"class":544},[68,1296,1297],{"class":78}," \"Bun version: \"\n",[68,1299,1301,1304],{"class":70,"line":1300},93,[68,1302,1303],{"class":74},"    bun",[68,1305,1088],{"class":78},[68,1307,1309],{"class":70,"line":1308},94,[68,1310,909],{"class":323},[68,1312,1314],{"class":70,"line":1313},95,[68,1315,538],{"emptyLinePlaceholder":537},[68,1317,1319,1321],{"class":70,"line":1318},96,[68,1320,843],{"class":544},[68,1322,854],{"class":78},[68,1324,1326,1328],{"class":70,"line":1325},97,[68,1327,843],{"class":544},[68,1329,1330],{"class":78}," \"Installation process finished.\"\n",[68,1332,1334,1336],{"class":70,"line":1333},98,[68,1335,843],{"class":544},[68,1337,854],{"class":78},[68,1339,1341,1343],{"class":70,"line":1340},99,[68,1342,843],{"class":544},[68,1344,1345],{"class":78}," \"Add the global npm bin directory to your PATH by adding this line to your .bashrc or .zshrc:\"\n",[68,1347,1349,1351],{"class":70,"line":1348},100,[68,1350,843],{"class":544},[68,1352,1353],{"class":78}," 'export PATH=~\u002F.npm-global\u002Fbin:$PATH'\n",[68,1355,1357,1359],{"class":70,"line":1356},101,[68,1358,843],{"class":544},[68,1360,854],{"class":78},[39,1362,1364],{"id":1363},"y-qué-hay-de-nvm","¿Y qué hay de NVM?",[10,1366,1367,1372],{},[14,1368,1371],{"href":1369,"rel":1370},"https:\u002F\u002Fgithub.com\u002Fnvm-sh\u002Fnvm",[26],"Node Version Manager (NVM)"," es una herramienta fantástica para gestionar múltiples versiones de Node.js. Sin embargo, personalmente prefiero mantenerme con una única instalación de la última versión LTS a nivel de sistema. Este enfoque me obliga a mantener mis proyectos actualizados. Además, Node.js no suele introducir grandes cambios disruptivos en sus versiones LTS, por lo que el proceso de actualización suele ser sencillo.",[10,1374,1375,1376,28,1378,1380,1381,1383],{},"Si prefieres la flexibilidad de NVM, puedes seguir usándolo, pero probablemente acabarías eligiendo un método u otro. Después de instalar NVM, gestionarías tus gestores de paquetes como ",[47,1377,377],{},[47,1379,33],{}," instalándolos globalmente a través de ",[47,1382,252],{}," para cada versión de Node que utilices. Podrías entonces usar alias para cambiar entre diferentes versiones de tus herramientas. Ten en cuenta que esto a veces puede llevar a conflictos de rutas o comportamientos inesperados, así que ten cuidado con qué versiones están activas en tu terminal.",[1385,1386,1387],"style",{},"html pre.shiki code .sMmZK, html code.shiki .sMmZK{--shiki-default:#1E66F5;--shiki-default-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic}html pre.shiki code .sgueU, html code.shiki .sgueU{--shiki-default:#40A02B;--shiki-dark:#A6E3A1}html pre.shiki code .sjJjI, html code.shiki .sjJjI{--shiki-default:#179299;--shiki-dark:#94E2D5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sAS4m, html code.shiki .sAS4m{--shiki-default:#8839EF;--shiki-dark:#CBA6F7}html pre.shiki code .s0aCy, html code.shiki .s0aCy{--shiki-default:#4C4F69;--shiki-dark:#CDD6F4}html pre.shiki code .skWWU, html code.shiki .skWWU{--shiki-default:#EA76CB;--shiki-default-font-style:italic;--shiki-dark:#F5C2E7;--shiki-dark-font-style:italic}html pre.shiki code .som-u, html code.shiki .som-u{--shiki-default:#7C7F93;--shiki-default-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic}html pre.shiki code .s-0VM, html code.shiki .s-0VM{--shiki-default:#D20F39;--shiki-default-font-style:italic;--shiki-dark:#F38BA8;--shiki-dark-font-style:italic}html pre.shiki code .sxyLT, html code.shiki .sxyLT{--shiki-default:#7C7F93;--shiki-dark:#9399B2}html pre.shiki code .s2f33, html code.shiki .s2f33{--shiki-default:#E64553;--shiki-default-font-style:italic;--shiki-dark:#EBA0AC;--shiki-dark-font-style:italic}html pre.shiki code .st0oN, html code.shiki .st0oN{--shiki-default:#FE640B;--shiki-dark:#FAB387}",{"title":64,"searchDepth":121,"depth":121,"links":1389},[1390,1391,1398,1399],{"id":41,"depth":121,"text":42},{"id":134,"depth":121,"text":135,"children":1392},[1393,1394,1395,1396,1397],{"id":142,"depth":455,"text":143},{"id":219,"depth":455,"text":220},{"id":256,"depth":455,"text":257},{"id":337,"depth":455,"text":338},{"id":383,"depth":455,"text":384},{"id":430,"depth":121,"text":431},{"id":1363,"depth":121,"text":1364},"2025-10-12","Instalar Node.js 24 en Ubuntu 24 debería ser un proceso sencillo. Aunque Ubuntu incluye una versión de Node.js en sus repositorios por defecto, es posible que quieras utilizar una versión más reciente, como Node.js 24, que es LTS desde el 28 de octubre de 2025 y tiene soporte hasta abril de 2028. Si vas a instalarlo desde cero, mejor instala Node.js 26 en Ubuntu 26.04. En esta guía te enseño dos métodos para que lo tengas listo rápidamente.","md",null,{},"\u002Fes\u002Fblog\u002Finstall-node-24-on-ubuntu-24","6",{"title":5,"description":1401},"es\u002Fblog\u002F0002.install-node-24-on-ubuntu-24",[1410,1411,1412,63],"nodejs","ubuntu","javascript",false,"2026-11-05","33hp5JYkoafvouwFqHPqbFZsDwWbvLJ-g1URSDiIIKI",{"id":1417,"title":1418,"body":1419,"date":1400,"description":2496,"extension":1402,"image":1403,"meta":2497,"navigation":537,"path":2498,"readingTime":1406,"schemaOrg":1403,"seo":2499,"stem":2500,"tags":2501,"toc":1413,"updatedAt":1414,"__hash__":2502},"blog_en\u002Fblog\u002F0002.install-node-24-on-ubuntu-24.md","Install Node.js 24 on Ubuntu 24.04",{"type":7,"value":1420,"toc":2484},[1421,1429,1440,1444,1453,1456,1472,1480,1486,1508,1512,1515,1519,1522,1550,1557,1579,1583,1586,1602,1611,1615,1624,1648,1660,1674,1678,1691,1694,1706,1714,1718,1726,1754,1758,1761,2461,2465,2471,2482],[10,1422,1423,1424,1428],{},"Getting Node.js 24 running on Ubuntu 24 should be a straightforward process. While Ubuntu comes with a version of Node.js in its default repositories, you might want to use Node.js 24, which became LTS on October 28, 2025 and is supported until April 2028. For a new setup, ",[14,1425,1427],{"href":1426},"\u002Fblog\u002Fapt-install-node-26-on-ubuntu-26\u002F","install Node.js 26 on Ubuntu 26.04"," instead. This guide offers two simple methods to get you set up quickly.",[10,1430,1431,1432,1435,1436,1439],{},"We'll cover a one-liner script that automates everything, including setting up a proper global prefix for npm and enabling ",[14,1433,27],{"href":24,"rel":1434},[26]," and ",[14,1437,33],{"href":31,"rel":1438},[26]," via Corepack. For those who prefer manual control, we'll also walk through each step in detail.",[39,1441,1443],{"id":1442},"the-easy-way","The easy way",[10,1445,1446,1447,1449,1450,1452],{},"I've created a script, so you can install everything by running a single command. This script will set up Node.js 24, configure a global npm prefix (so you don't need ",[47,1448,49],{}," for global packages), and optionally enable ",[47,1451,53],{}," (for Yarn and pnpm) and install Bun.",[10,1454,1455],{},"Just open your terminal and run this:",[59,1457,1458],{"className":61,"code":62,"language":63,"meta":64,"style":64},[47,1459,1460],{"__ignoreMap":64},[68,1461,1462,1464,1466,1468,1470],{"class":70,"line":71},[68,1463,75],{"class":74},[68,1465,79],{"class":78},[68,1467,82],{"class":78},[68,1469,86],{"class":85},[68,1471,89],{"class":74},[10,1473,1474,1475,1479],{},"The script will ask for confirmation at each major step, so you still have control over what gets installed. You can also review the ",[14,1476,1478],{"href":1477},"#the-script","full script content"," before running it or customize it for your own needs.",[10,1481,1482,1483,1485],{},"If you don't have ",[47,1484,75],{}," installed:",[59,1487,1488],{"className":61,"code":106,"language":63,"meta":64,"style":64},[47,1489,1490,1498],{"__ignoreMap":64},[68,1491,1492,1494,1496],{"class":70,"line":71},[68,1493,49],{"class":74},[68,1495,115],{"class":78},[68,1497,118],{"class":78},[68,1499,1500,1502,1504,1506],{"class":70,"line":121},[68,1501,49],{"class":74},[68,1503,115],{"class":78},[68,1505,128],{"class":78},[68,1507,131],{"class":78},[39,1509,1511],{"id":1510},"the-step-by-step-guide","The step-by-step guide",[10,1513,1514],{},"For those who prefer a hands-on approach, here’s a breakdown of what the script does. You can follow these steps to perform the installation manually.",[140,1516,1518],{"id":1517},"_1-update-dependencies-and-add-the-nodesource-repository","1. Update dependencies and add the NodeSource repository",[10,1520,1521],{},"First, we need to make sure our system has the necessary tools to fetch and install Node.js.",[59,1523,1524],{"className":61,"code":149,"language":63,"meta":64,"style":64},[47,1525,1526,1534],{"__ignoreMap":64},[68,1527,1528,1530,1532],{"class":70,"line":71},[68,1529,49],{"class":74},[68,1531,115],{"class":78},[68,1533,118],{"class":78},[68,1535,1536,1538,1540,1542,1544,1546,1548],{"class":70,"line":121},[68,1537,49],{"class":74},[68,1539,115],{"class":78},[68,1541,128],{"class":78},[68,1543,170],{"class":78},[68,1545,173],{"class":78},[68,1547,176],{"class":78},[68,1549,179],{"class":78},[10,1551,1552,1553,1556],{},"Next, we'll add the ",[14,1554,187],{"href":185,"rel":1555},[26]," repository, which is a trusted source for up-to-date Node.js versions on Debian and Ubuntu.",[59,1558,1559],{"className":61,"code":191,"language":63,"meta":64,"style":64},[47,1560,1561],{"__ignoreMap":64},[68,1562,1563,1565,1567,1569,1571,1573,1575,1577],{"class":70,"line":71},[68,1564,75],{"class":74},[68,1566,79],{"class":78},[68,1568,202],{"class":78},[68,1570,86],{"class":85},[68,1572,207],{"class":74},[68,1574,210],{"class":78},[68,1576,213],{"class":78},[68,1578,216],{"class":78},[140,1580,1582],{"id":1581},"_2-install-nodejs-and-npm","2. Install Node.js and npm",[10,1584,1585],{},"With the repository in place, installing Node.js is as simple as running:",[59,1587,1588],{"className":61,"code":226,"language":63,"meta":64,"style":64},[47,1589,1590],{"__ignoreMap":64},[68,1591,1592,1594,1596,1598,1600],{"class":70,"line":71},[68,1593,49],{"class":74},[68,1595,235],{"class":78},[68,1597,128],{"class":78},[68,1599,170],{"class":78},[68,1601,242],{"class":78},[10,1603,1604,1605,1607,1608,1610],{},"This command installs both the ",[47,1606,248],{}," runtime and the ",[47,1609,252],{}," package manager.",[140,1612,1614],{"id":1613},"_3-configure-npms-global-prefix","3. Configure npm's global prefix",[10,1616,1617,1618,1620,1621,1623],{},"By default, ",[47,1619,252],{}," installs global packages in a system directory that requires ",[47,1622,49],{},". This can lead to permission issues down the line. To avoid this, it's a best practice to configure a local directory for your global packages.",[59,1625,1626],{"className":61,"code":269,"language":63,"meta":64,"style":64},[47,1627,1628,1636],{"__ignoreMap":64},[68,1629,1630,1632,1634],{"class":70,"line":71},[68,1631,276],{"class":74},[68,1633,279],{"class":78},[68,1635,282],{"class":78},[68,1637,1638,1640,1642,1644,1646],{"class":70,"line":121},[68,1639,252],{"class":74},[68,1641,289],{"class":78},[68,1643,292],{"class":78},[68,1645,295],{"class":78},[68,1647,298],{"class":78},[10,1649,1650,1651,1653,1654,1656,1657,1659],{},"You'll also need to add this directory to your ",[47,1652,304],{},". Open your ",[47,1655,308],{}," or ",[47,1658,312],{}," file and add the following line:",[59,1661,1662],{"className":61,"code":316,"language":63,"meta":64,"style":64},[47,1663,1664],{"__ignoreMap":64},[68,1665,1666,1668,1670,1672],{"class":70,"line":71},[68,1667,324],{"class":323},[68,1669,328],{"class":327},[68,1671,331],{"class":85},[68,1673,334],{"class":327},[140,1675,1677],{"id":1676},"_4-enable-corepack-for-yarn-and-pnpm","4. Enable Corepack (for Yarn and pnpm)",[10,1679,1680,1683,1684,1656,1687,1690],{},[14,1681,345],{"href":343,"rel":1682},[26]," is an experimental tool included with Node.js that simplifies managing different package managers. With it, you don't need to install ",[14,1685,27],{"href":24,"rel":1686},[26],[14,1688,33],{"href":31,"rel":1689},[26]," manually.",[10,1692,1693],{},"To enable it, just run:",[59,1695,1696],{"className":61,"code":359,"language":63,"meta":64,"style":64},[47,1697,1698],{"__ignoreMap":64},[68,1699,1700,1702,1704],{"class":70,"line":71},[68,1701,49],{"class":74},[68,1703,368],{"class":78},[68,1705,371],{"class":78},[10,1707,1708,1709,1435,1711,1713],{},"Now you can use ",[47,1710,377],{},[47,1712,33],{}," in your projects without any extra installation steps.",[140,1715,1717],{"id":1716},"_5-install-bun-optional","5. Install Bun (optional)",[10,1719,1720,1723,1724,396],{},[14,1721,391],{"href":389,"rel":1722},[26]," is a fast, all-in-one JavaScript toolkit that has been gaining a lot of traction. If you want to give it a try, you can install it with its official script, which needs ",[47,1725,395],{},[59,1727,1728],{"className":61,"code":399,"language":63,"meta":64,"style":64},[47,1729,1730,1742],{"__ignoreMap":64},[68,1731,1732,1734,1736,1738,1740],{"class":70,"line":71},[68,1733,49],{"class":74},[68,1735,115],{"class":78},[68,1737,128],{"class":78},[68,1739,170],{"class":78},[68,1741,414],{"class":78},[68,1743,1744,1746,1748,1750,1752],{"class":70,"line":121},[68,1745,75],{"class":74},[68,1747,79],{"class":78},[68,1749,423],{"class":78},[68,1751,86],{"class":85},[68,1753,89],{"class":74},[39,1755,1757],{"id":1756},"the-script","The script",[10,1759,1760],{},"This is the complete script that automates the steps above. It asks for confirmation before each step and removes its temporary files on exit.",[59,1762,1763],{"className":61,"code":437,"filename":438,"language":63,"meta":64,"style":64},[47,1764,1765,1769,1773,1777,1781,1785,1789,1793,1797,1801,1805,1809,1813,1817,1821,1825,1829,1833,1839,1843,1847,1855,1873,1885,1911,1917,1921,1943,1949,1953,1957,1963,1973,1977,1981,1985,1989,1993,2001,2009,2017,2021,2035,2043,2047,2053,2059,2063,2081,2087,2093,2097,2101,2107,2111,2119,2131,2135,2141,2159,2171,2175,2187,2191,2199,2211,2221,2225,2231,2237,2243,2247,2253,2257,2269,2275,2283,2289,2295,2301,2307,2313,2317,2321,2327,2331,2343,2349,2361,2373,2387,2405,2411,2417,2421,2425,2431,2437,2443,2449,2455],{"__ignoreMap":64},[68,1766,1767],{"class":70,"line":71},[68,1768,446],{"class":445},[68,1770,1771],{"class":70,"line":121},[68,1772,452],{"class":451},[68,1774,1775],{"class":70,"line":455},[68,1776,458],{"class":451},[68,1778,1779],{"class":70,"line":461},[68,1780,464],{"class":451},[68,1782,1783],{"class":70,"line":467},[68,1784,452],{"class":451},[68,1786,1787],{"class":70,"line":472},[68,1788,475],{"class":451},[68,1790,1791],{"class":70,"line":478},[68,1792,452],{"class":451},[68,1794,1795],{"class":70,"line":483},[68,1796,486],{"class":451},[68,1798,1799],{"class":70,"line":489},[68,1800,452],{"class":451},[68,1802,1803],{"class":70,"line":494},[68,1804,497],{"class":451},[68,1806,1807],{"class":70,"line":500},[68,1808,503],{"class":451},[68,1810,1811],{"class":70,"line":506},[68,1812,452],{"class":451},[68,1814,1815],{"class":70,"line":511},[68,1816,514],{"class":451},[68,1818,1819],{"class":70,"line":517},[68,1820,520],{"class":451},[68,1822,1823],{"class":70,"line":523},[68,1824,526],{"class":451},[68,1826,1827],{"class":70,"line":529},[68,1828,452],{"class":451},[68,1830,1831],{"class":70,"line":534},[68,1832,538],{"emptyLinePlaceholder":537},[68,1834,1835,1837],{"class":70,"line":541},[68,1836,545],{"class":544},[68,1838,548],{"class":78},[68,1840,1841],{"class":70,"line":551},[68,1842,538],{"emptyLinePlaceholder":537},[68,1844,1845],{"class":70,"line":556},[68,1846,559],{"class":451},[68,1848,1849,1851,1853],{"class":70,"line":562},[68,1850,565],{"class":74},[68,1852,569],{"class":568},[68,1854,572],{"class":568},[68,1856,1857,1859,1861,1863,1865,1867,1869,1871],{"class":70,"line":575},[68,1858,578],{"class":544},[68,1860,279],{"class":78},[68,1862,583],{"class":78},[68,1864,587],{"class":586},[68,1866,590],{"class":78},[68,1868,593],{"class":78},[68,1870,596],{"class":85},[68,1872,599],{"class":78},[68,1874,1875,1877,1879,1881,1883],{"class":70,"line":602},[68,1876,605],{"class":323},[68,1878,583],{"class":78},[68,1880,610],{"class":327},[68,1882,613],{"class":78},[68,1884,616],{"class":323},[68,1886,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909],{"class":70,"line":619},[68,1888,622],{"class":568},[68,1890,625],{"class":78},[68,1892,628],{"class":568},[68,1894,631],{"class":568},[68,1896,634],{"class":568},[68,1898,625],{"class":78},[68,1900,639],{"class":568},[68,1902,642],{"class":78},[68,1904,639],{"class":568},[68,1906,647],{"class":78},[68,1908,628],{"class":568},[68,1910,652],{"class":85},[68,1912,1913,1915],{"class":70,"line":655},[68,1914,658],{"class":323},[68,1916,662],{"class":661},[68,1918,1919],{"class":70,"line":665},[68,1920,668],{"class":568},[68,1922,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941],{"class":70,"line":671},[68,1924,622],{"class":568},[68,1926,676],{"class":78},[68,1928,628],{"class":568},[68,1930,631],{"class":568},[68,1932,634],{"class":568},[68,1934,676],{"class":78},[68,1936,639],{"class":568},[68,1938,689],{"class":78},[68,1940,628],{"class":568},[68,1942,652],{"class":85},[68,1944,1945,1947],{"class":70,"line":696},[68,1946,658],{"class":323},[68,1948,701],{"class":661},[68,1950,1951],{"class":70,"line":704},[68,1952,668],{"class":568},[68,1954,1955],{"class":70,"line":709},[68,1956,712],{"class":85},[68,1958,1959,1961],{"class":70,"line":715},[68,1960,718],{"class":544},[68,1962,721],{"class":78},[68,1964,1965,1967,1969,1971],{"class":70,"line":724},[68,1966,727],{"class":74},[68,1968,583],{"class":78},[68,1970,587],{"class":586},[68,1972,734],{"class":78},[68,1974,1975],{"class":70,"line":737},[68,1976,668],{"class":568},[68,1978,1979],{"class":70,"line":742},[68,1980,745],{"class":323},[68,1982,1983],{"class":70,"line":748},[68,1984,751],{"class":568},[68,1986,1987],{"class":70,"line":754},[68,1988,538],{"emptyLinePlaceholder":537},[68,1990,1991],{"class":70,"line":759},[68,1992,762],{"class":451},[68,1994,1995,1997,1999],{"class":70,"line":765},[68,1996,768],{"class":327},[68,1998,771],{"class":85},[68,2000,774],{"class":78},[68,2002,2003,2005,2007],{"class":70,"line":777},[68,2004,780],{"class":327},[68,2006,771],{"class":85},[68,2008,785],{"class":78},[68,2010,2011,2013,2015],{"class":70,"line":788},[68,2012,791],{"class":327},[68,2014,771],{"class":85},[68,2016,796],{"class":78},[68,2018,2019],{"class":70,"line":799},[68,2020,538],{"emptyLinePlaceholder":537},[68,2022,2023,2025,2027,2029,2031,2033],{"class":70,"line":804},[68,2024,807],{"class":327},[68,2026,771],{"class":85},[68,2028,812],{"class":568},[68,2030,815],{"class":74},[68,2032,818],{"class":78},[68,2034,652],{"class":568},[68,2036,2037,2039,2041],{"class":70,"line":823},[68,2038,826],{"class":544},[68,2040,829],{"class":78},[68,2042,832],{"class":78},[68,2044,2045],{"class":70,"line":835},[68,2046,538],{"emptyLinePlaceholder":537},[68,2048,2049,2051],{"class":70,"line":840},[68,2050,843],{"class":544},[68,2052,846],{"class":78},[68,2054,2055,2057],{"class":70,"line":849},[68,2056,843],{"class":544},[68,2058,854],{"class":78},[68,2060,2061],{"class":70,"line":857},[68,2062,538],{"emptyLinePlaceholder":537},[68,2064,2065,2067,2069,2071,2073,2075,2077,2079],{"class":70,"line":862},[68,2066,865],{"class":323},[68,2068,868],{"class":85},[68,2070,871],{"class":74},[68,2072,874],{"class":78},[68,2074,877],{"class":327},[68,2076,880],{"class":78},[68,2078,883],{"class":568},[68,2080,886],{"class":323},[68,2082,2083,2085],{"class":70,"line":889},[68,2084,892],{"class":544},[68,2086,895],{"class":78},[68,2088,2089,2091],{"class":70,"line":898},[68,2090,901],{"class":544},[68,2092,662],{"class":661},[68,2094,2095],{"class":70,"line":906},[68,2096,909],{"class":323},[68,2098,2099],{"class":70,"line":912},[68,2100,538],{"emptyLinePlaceholder":537},[68,2102,2103,2105],{"class":70,"line":917},[68,2104,843],{"class":544},[68,2106,922],{"class":78},[68,2108,2109],{"class":70,"line":925},[68,2110,538],{"emptyLinePlaceholder":537},[68,2112,2113,2115,2117],{"class":70,"line":930},[68,2114,49],{"class":74},[68,2116,115],{"class":78},[68,2118,118],{"class":78},[68,2120,2121,2123,2125,2127,2129],{"class":70,"line":939},[68,2122,49],{"class":74},[68,2124,115],{"class":78},[68,2126,128],{"class":78},[68,2128,170],{"class":78},[68,2130,950],{"class":327},[68,2132,2133],{"class":70,"line":953},[68,2134,538],{"emptyLinePlaceholder":537},[68,2136,2137,2139],{"class":70,"line":958},[68,2138,843],{"class":544},[68,2140,963],{"class":78},[68,2142,2143,2145,2147,2149,2151,2153,2155,2157],{"class":70,"line":966},[68,2144,75],{"class":74},[68,2146,79],{"class":78},[68,2148,973],{"class":78},[68,2150,877],{"class":327},[68,2152,978],{"class":78},[68,2154,981],{"class":78},[68,2156,984],{"class":327},[68,2158,987],{"class":78},[68,2160,2161,2163,2165,2167,2169],{"class":70,"line":990},[68,2162,49],{"class":74},[68,2164,210],{"class":78},[68,2166,213],{"class":78},[68,2168,984],{"class":327},[68,2170,987],{"class":78},[68,2172,2173],{"class":70,"line":1003},[68,2174,538],{"emptyLinePlaceholder":537},[68,2176,2177,2179,2181,2183,2185],{"class":70,"line":1008},[68,2178,49],{"class":74},[68,2180,235],{"class":78},[68,2182,128],{"class":78},[68,2184,170],{"class":78},[68,2186,242],{"class":78},[68,2188,2189],{"class":70,"line":1021},[68,2190,538],{"emptyLinePlaceholder":537},[68,2192,2193,2195,2197],{"class":70,"line":1026},[68,2194,276],{"class":74},[68,2196,279],{"class":78},[68,2198,282],{"class":78},[68,2200,2201,2203,2205,2207,2209],{"class":70,"line":1035},[68,2202,252],{"class":74},[68,2204,289],{"class":78},[68,2206,292],{"class":78},[68,2208,295],{"class":78},[68,2210,1046],{"class":327},[68,2212,2213,2215,2217,2219],{"class":70,"line":1049},[68,2214,843],{"class":544},[68,2216,1054],{"class":78},[68,2218,1057],{"class":327},[68,2220,734],{"class":78},[68,2222,2223],{"class":70,"line":1062},[68,2224,538],{"emptyLinePlaceholder":537},[68,2226,2227,2229],{"class":70,"line":1067},[68,2228,843],{"class":544},[68,2230,1072],{"class":78},[68,2232,2233,2235],{"class":70,"line":1075},[68,2234,843],{"class":544},[68,2236,1080],{"class":78},[68,2238,2239,2241],{"class":70,"line":1083},[68,2240,248],{"class":74},[68,2242,1088],{"class":78},[68,2244,2245],{"class":70,"line":1091},[68,2246,538],{"emptyLinePlaceholder":537},[68,2248,2249,2251],{"class":70,"line":1096},[68,2250,843],{"class":544},[68,2252,854],{"class":78},[68,2254,2255],{"class":70,"line":1103},[68,2256,538],{"emptyLinePlaceholder":537},[68,2258,2259,2261,2263,2265,2267],{"class":70,"line":1108},[68,2260,865],{"class":323},[68,2262,871],{"class":74},[68,2264,1115],{"class":78},[68,2266,883],{"class":568},[68,2268,886],{"class":323},[68,2270,2271,2273],{"class":70,"line":1122},[68,2272,892],{"class":544},[68,2274,1127],{"class":78},[68,2276,2277,2279,2281],{"class":70,"line":1130},[68,2278,1133],{"class":74},[68,2280,368],{"class":78},[68,2282,371],{"class":78},[68,2284,2285,2287],{"class":70,"line":1140},[68,2286,892],{"class":544},[68,2288,1145],{"class":78},[68,2290,2291,2293],{"class":70,"line":1148},[68,2292,892],{"class":544},[68,2294,1153],{"class":78},[68,2296,2297,2299],{"class":70,"line":1156},[68,2298,1159],{"class":74},[68,2300,1088],{"class":78},[68,2302,2303,2305],{"class":70,"line":1164},[68,2304,892],{"class":544},[68,2306,1169],{"class":78},[68,2308,2309,2311],{"class":70,"line":1172},[68,2310,1175],{"class":74},[68,2312,1088],{"class":78},[68,2314,2315],{"class":70,"line":1180},[68,2316,909],{"class":323},[68,2318,2319],{"class":70,"line":1185},[68,2320,538],{"emptyLinePlaceholder":537},[68,2322,2323,2325],{"class":70,"line":1190},[68,2324,843],{"class":544},[68,2326,854],{"class":78},[68,2328,2329],{"class":70,"line":1197},[68,2330,538],{"emptyLinePlaceholder":537},[68,2332,2333,2335,2337,2339,2341],{"class":70,"line":1202},[68,2334,865],{"class":323},[68,2336,871],{"class":74},[68,2338,1209],{"class":78},[68,2340,883],{"class":568},[68,2342,886],{"class":323},[68,2344,2345,2347],{"class":70,"line":1216},[68,2346,892],{"class":544},[68,2348,1221],{"class":78},[68,2350,2351,2353,2355,2357,2359],{"class":70,"line":1224},[68,2352,1133],{"class":74},[68,2354,115],{"class":78},[68,2356,128],{"class":78},[68,2358,170],{"class":78},[68,2360,414],{"class":78},[68,2362,2363,2365,2367,2369,2371],{"class":70,"line":1237},[68,2364,1240],{"class":74},[68,2366,79],{"class":78},[68,2368,423],{"class":78},[68,2370,86],{"class":85},[68,2372,89],{"class":74},[68,2374,2375,2377,2379,2381,2383,2385],{"class":70,"line":1251},[68,2376,1254],{"class":323},[68,2378,1257],{"class":327},[68,2380,771],{"class":85},[68,2382,613],{"class":78},[68,2384,1264],{"class":327},[68,2386,1267],{"class":78},[68,2388,2389,2391,2393,2395,2397,2399,2401,2403],{"class":70,"line":1270},[68,2390,1254],{"class":323},[68,2392,328],{"class":327},[68,2394,771],{"class":85},[68,2396,613],{"class":78},[68,2398,1281],{"class":327},[68,2400,1284],{"class":78},[68,2402,1287],{"class":327},[68,2404,734],{"class":78},[68,2406,2407,2409],{"class":70,"line":1292},[68,2408,892],{"class":544},[68,2410,1297],{"class":78},[68,2412,2413,2415],{"class":70,"line":1300},[68,2414,1303],{"class":74},[68,2416,1088],{"class":78},[68,2418,2419],{"class":70,"line":1308},[68,2420,909],{"class":323},[68,2422,2423],{"class":70,"line":1313},[68,2424,538],{"emptyLinePlaceholder":537},[68,2426,2427,2429],{"class":70,"line":1318},[68,2428,843],{"class":544},[68,2430,854],{"class":78},[68,2432,2433,2435],{"class":70,"line":1325},[68,2434,843],{"class":544},[68,2436,1330],{"class":78},[68,2438,2439,2441],{"class":70,"line":1333},[68,2440,843],{"class":544},[68,2442,854],{"class":78},[68,2444,2445,2447],{"class":70,"line":1340},[68,2446,843],{"class":544},[68,2448,1345],{"class":78},[68,2450,2451,2453],{"class":70,"line":1348},[68,2452,843],{"class":544},[68,2454,1353],{"class":78},[68,2456,2457,2459],{"class":70,"line":1356},[68,2458,843],{"class":544},[68,2460,854],{"class":78},[39,2462,2464],{"id":2463},"what-about-nvm","What about NVM?",[10,2466,2467,2470],{},[14,2468,1371],{"href":1369,"rel":2469},[26]," is a fantastic tool for managing multiple Node.js versions. However, I personally prefer to stick to a single, system-wide installation of the latest LTS version. This approach forces me to keep my projects updated. Besides, Node.js rarely introduces major breaking changes in its LTS releases, so the upgrade process is usually straightforward.",[10,2472,2473,2474,1435,2476,2478,2479,2481],{},"If you prefer the flexibility of NVM, you can still use it, but you would likely choose one method or the other. After installing NVM, you would manage your package managers like ",[47,2475,377],{},[47,2477,33],{}," by installing them globally via ",[47,2480,252],{}," for each Node version you use. You could then use aliases to switch between different versions of your tools. Be aware that this can sometimes lead to path conflicts or unexpected behavior, so be mindful of which versions are active in your shell.",[1385,2483,1387],{},{"title":64,"searchDepth":121,"depth":121,"links":2485},[2486,2487,2494,2495],{"id":1442,"depth":121,"text":1443},{"id":1510,"depth":121,"text":1511,"children":2488},[2489,2490,2491,2492,2493],{"id":1517,"depth":455,"text":1518},{"id":1581,"depth":455,"text":1582},{"id":1613,"depth":455,"text":1614},{"id":1676,"depth":455,"text":1677},{"id":1716,"depth":455,"text":1717},{"id":1756,"depth":121,"text":1757},{"id":2463,"depth":121,"text":2464},"Getting Node.js 24 running on Ubuntu 24 should be a straightforward process. While Ubuntu comes with a version of Node.js in its default repositories, you might want to use Node.js 24, which became LTS on October 28, 2025 and is supported until April 2028. For a new setup, install Node.js 26 on Ubuntu 26.04 instead. This guide offers two simple methods to get you set up quickly.",{},"\u002Fblog\u002Finstall-node-24-on-ubuntu-24",{"title":1418,"description":2496},"blog\u002F0002.install-node-24-on-ubuntu-24",[1410,1411,1412,63],"z16PPq91CandIKkd3A6fbP6RsFK1w6Kgj4M9cjufgIo",[2504,2515,2525,2532,2542,2544],{"id":2505,"path":2506,"title":2507,"description":2508,"date":2509,"readingTime":2510,"tags":2511},"blog_es\u002Fes\u002Fblog\u002F0006.lint-tailwind-css-v4-with-eslint.md","\u002Fes\u002Fblog\u002Flint-tailwind-css-v4-with-eslint","@angelblanco\u002Feslint-config 3.0 ya disponible, ahora con Tailwind CSS","@angelblanco\u002Feslint-config 3.0 ya está en npm: lint opcional de Tailwind CSS v4, @antfu\u002Feslint-config v10 y ESLint 10.","2026-11-07","2",[2512,2513,2514,252],"eslint","tailwindcss","tooling",{"id":2516,"path":2517,"title":2518,"description":2519,"date":2520,"readingTime":2521,"tags":2522},"blog_es\u002Fes\u002Fblog\u002F0005.apt-install-php-85-on-ubuntu-26.md","\u002Fes\u002Fblog\u002Fapt-install-php-85-on-ubuntu-26","Instalar PHP 8.5 con apt en Ubuntu 26.04","Instala PHP 8.5 y Composer en Ubuntu 26.04 LTS con apt desde el repositorio packages.sury.org de Ondřej Surý y mantenlos al día con apt upgrade.","2026-11-06","12",[2523,1411,2524,63],"php","composer",{"id":2526,"path":2527,"title":2528,"description":2529,"date":1414,"readingTime":2530,"tags":2531},"blog_es\u002Fes\u002Fblog\u002F0004.apt-install-node-26-on-ubuntu-26.md","\u002Fes\u002Fblog\u002Fapt-install-node-26-on-ubuntu-26","Instalar Node.js 26 con apt en Ubuntu 26.04","El 21 de octubre de 2026, Node.js publicó parches de seguridad para diez vulnerabilidades que afectan a sus versiones con soporte, cuatro de ellas graves, incluida una ejecución remota de código. Las versiones sin soporte, como Node.js 20 y 25, no recibirán actualizaciones.","8",[1410,1411,1412,63],{"id":2533,"path":2534,"title":2535,"description":2536,"date":2537,"readingTime":2538,"tags":2539},"blog_es\u002Fes\u002Fblog\u002F0003.create-your-eslint-config.md","\u002Fes\u002Fblog\u002Fcreate-your-eslint-config","Crea tu propia configuración de ESLint y compártela entre proyectos","Si alguna vez has trabajado en varios proyectos, conoces el aburrimiento de copiar configuraciones de ESLint de un repositorio a otro. Cada vez que empiezas un proyecto nuevo, o partes de cero o copias el archivo eslint.config.js del anterior. Hay una forma mejor: publicar tu propio paquete de configuración de ESLint.","2025-11-02","3",[2512,2540,2541,2514,252],"typescript","vue",{"id":4,"path":1405,"title":5,"description":1401,"date":1400,"readingTime":1406,"tags":2543},[1410,1411,1412,63],{"id":2545,"path":2546,"title":2547,"description":2548,"date":2549,"readingTime":2550,"tags":2551},"blog_es\u002Fes\u002Fblog\u002F0001.hello.md","\u002Fes\u002Fblog\u002Fhello","De Svelte a Nuxt: Reconstruyendo mi portfolio en 2025","Estamos en 2025 y acabo de publicar una versión completamente nueva de mi web personal. He migrado de un stack basado en Svelte y Sapper a Nuxt, Tailwind CSS y un monorepo con Turborepo. No ha sido un cambio estético, sino una reescritura completa, fruto de cinco años de evolución en el frontend y de las ganas de usar en casa las mismas herramientas que en el trabajo.","2025-09-27","4",[2552,2541,2553,2554,2513],"nuxt","svelte","turborepo",1794096651955]