<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sanders Gutérrez</title>
    <description>The latest articles on DEV Community by Sanders Gutérrez (@untalsanders).</description>
    <link>https://dev.to/untalsanders</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F780148%2F253369c8-f0d1-4e0d-a220-ee982076c48d.jpg</url>
      <title>DEV Community: Sanders Gutérrez</title>
      <link>https://dev.to/untalsanders</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/untalsanders"/>
    <language>en</language>
    <item>
      <title>🔗 Entendiendo las URLs: Conceptos Básicos Basados en el Estándar RFC</title>
      <dc:creator>Sanders Gutérrez</dc:creator>
      <pubDate>Tue, 11 Nov 2025 07:38:38 +0000</pubDate>
      <link>https://dev.to/untalsanders/entendiendo-las-urls-conceptos-basicos-basados-en-el-estandar-rfc-13mo</link>
      <guid>https://dev.to/untalsanders/entendiendo-las-urls-conceptos-basicos-basados-en-el-estandar-rfc-13mo</guid>
      <description>&lt;p&gt;Hoy quiero hablarles de algo que todos usamos a diario, pero que muy pocos entienden a fondo: &lt;strong&gt;las URLs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Me resulta curioso, que muchas personas que ya tienen &lt;strong&gt;experiencia en desarrollando web&lt;/strong&gt;, a veces &lt;strong&gt;desconozcan la base técnica&lt;/strong&gt; sobre la que está construido el concepto de una URL.&lt;br&gt;&lt;br&gt;
Saben que una URL apunta a una página o a un recurso, sí... pero &lt;strong&gt;¿qué significa cada parte?&lt;/strong&gt;, &lt;strong&gt;¿por qué algunas llevan puerto y otras no?&lt;/strong&gt; pues hoy vamos a explorar parte de la documentación técnica contenida en el &lt;strong&gt;estándar RFC 3986&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Este artículo te explica paso a paso, con ejemplos claros y lenguaje simple pero sin perder el rigor técnico &lt;strong&gt;cómo está estructurada una URL según el estándar oficial de Internet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Así que si quieres mejorar tu comprensión de la web desde sus cimientos, lee hasta el final, porque este es un tema mucho más interesante de lo que parece.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;QUÉ ES UNA URL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Empecemos por lo básico.&lt;/p&gt;

&lt;p&gt;Una &lt;strong&gt;URL&lt;/strong&gt; (&lt;em&gt;Uniform Resource Locator&lt;/em&gt;) es una forma estandarizada de &lt;strong&gt;identificar y localizar recursos&lt;/strong&gt; en la red: páginas, archivos, imágenes o servicios.&lt;/p&gt;

&lt;p&gt;Según el estándar &lt;strong&gt;RFC 3986&lt;/strong&gt;, una URL es un tipo específico de &lt;strong&gt;URI&lt;/strong&gt; (Identificador Uniforme de Recurso). La diferencia es que una URL &lt;strong&gt;no solo identifica un recurso&lt;/strong&gt;, sino que también &lt;strong&gt;indica cómo acceder a él&lt;/strong&gt;, normalmente a través de un protocolo.&lt;/p&gt;

&lt;p&gt;Imagina que una URL es como una &lt;strong&gt;dirección postal digital&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;el &lt;em&gt;protocolo&lt;/em&gt; te dice &lt;strong&gt;cómo llegar&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;el &lt;em&gt;servidor&lt;/em&gt; te dice &lt;strong&gt;dónde está&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;y la &lt;em&gt;ruta&lt;/em&gt; te indica &lt;strong&gt;a qué parte específica quieres acceder&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un ejemplo clásico sería: &lt;/p&gt;

&lt;p&gt;👉🏾 &lt;code&gt;https://www.ejemplo.com/ruta/archivo.html?parametro=valor#seccion&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Ahora, veamos cómo se compone internamente.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;ESTRUCTURA GENERAL DE UNA URL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;RFC 3986&lt;/strong&gt; define la sintaxis general de un URI —y por extensión de una URL— de forma jerárquica.&lt;/p&gt;

&lt;p&gt;La estructura base es esta: &lt;code&gt;scheme:[//authority]path[?query][#fragment]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Cada componente cumple una función específica:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scheme&lt;/strong&gt; → define el protocolo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authority&lt;/strong&gt; → indica el servidor o host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path&lt;/strong&gt; → especifica la ruta dentro del servidor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query&lt;/strong&gt; → contiene los parámetros de consulta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fragment&lt;/strong&gt; → apunta a una parte específica del recurso.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No todas las URLs usan todos los componentes.&lt;/p&gt;

&lt;p&gt;Por ejemplo, &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mailto:usuario@ejemplo.com&lt;/code&gt; solo tiene el &lt;em&gt;scheme&lt;/em&gt; y el &lt;em&gt;path&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tel:+1-212-555-1234&lt;/code&gt; solo tiene el &lt;em&gt;scheme&lt;/em&gt; y el &lt;em&gt;path&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En ninguno de los ejemplos anteriores se utilizan los componentes de autoridad, ruta, consulta ni fragmento.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;SCHEME (ESQUEMA)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;scheme&lt;/strong&gt; es la primera parte de la URL. Este define &lt;strong&gt;cómo acceder al recurso&lt;/strong&gt;, y siempre termina con dos puntos &lt;strong&gt;(:)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Algunos ejemplos comunes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;http:&lt;/code&gt; → sitios sin cifrado.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https:&lt;/code&gt; → sitios seguros (con TLS/SSL).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ftp:&lt;/code&gt; → transferencia de archivos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mailto:&lt;/code&gt; → direcciones de correo electrónico.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tel:&lt;/code&gt; → direcciones de teléfono.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ssh:&lt;/code&gt; → conexiones seguras a servidores SSH&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El RFC establece que el scheme debe comenzar con una &lt;strong&gt;letra&lt;/strong&gt; y puede incluir dígitos, más &lt;strong&gt;(+)&lt;/strong&gt;, punto &lt;strong&gt;(.)&lt;/strong&gt; o guion &lt;strong&gt;(-)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉🏾 En &lt;code&gt;https://www.ejemplo.com&lt;/code&gt;, el scheme es &lt;strong&gt;&lt;code&gt;https&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;AUTHORITY (AUTORIDAD)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Después del scheme, viene la &lt;strong&gt;authority&lt;/strong&gt;, que empieza con &lt;code&gt;//&lt;/code&gt;. Esta parte le dice al navegador &lt;strong&gt;a qué servidor conectarse&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;La autoridad puede incluir tres sub componentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Userinfo&lt;/strong&gt; → usuario y contraseña (por seguridad, a día de hoy casi no se usa).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Host&lt;/strong&gt; → el dominio o dirección IP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port&lt;/strong&gt; → el puerto, si no, se usa el predeterminado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo: 👉🏾 &lt;code&gt;https://usuario@www.ejemplo.com:443&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;usuario@&lt;/code&gt; → &lt;em&gt;userinfo&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;www.ejemplo.com&lt;/code&gt; → &lt;em&gt;host&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:443&lt;/code&gt; → &lt;em&gt;puerto&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si el puerto no se indica, se asume el estándar del protocolo (por ejemplo, 80 para HTTP, 443 para HTTPS).&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;PATH (RUTA)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;path&lt;/strong&gt; indica la &lt;strong&gt;ubicación exacta del recurso&lt;/strong&gt; dentro del servidor. Empieza con &lt;code&gt;/&lt;/code&gt; y puede tener varios niveles.&lt;/p&gt;

&lt;p&gt;Ejemplo: 👉🏾 &lt;code&gt;/ruta/subruta/archivo.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Si el path está vacío, el navegador asume que debe cargar el recurso raíz &lt;strong&gt;(&lt;code&gt;/&lt;/code&gt;)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;El RFC también define qué caracteres son válidos.&lt;/p&gt;

&lt;p&gt;Los caracteres especiales —como espacios— deben &lt;strong&gt;codificarse&lt;/strong&gt; con &lt;code&gt;%&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
Por ejemplo: un espacio se representa como &lt;code&gt;%20&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;QUERY (CONSULTA)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La &lt;strong&gt;query&lt;/strong&gt; empieza con &lt;code&gt;?&lt;/code&gt; y permite enviar información adicional al servidor. Sigue el formato &lt;code&gt;clave=valor&lt;/code&gt;, y si hay varios parámetros, se separan con &lt;code&gt;&amp;amp;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ejemplo: 👉🏾 &lt;code&gt;https://www.ejemplo.com/buscar?termino=palabra&amp;amp;pagina=2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;En este caso, &lt;code&gt;termino&lt;/code&gt; y &lt;code&gt;pagina&lt;/code&gt; son parámetros que el servidor usa para generar una respuesta específica como en una búsqueda o una API REST.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;FRAGMENT (FRAGMENTO)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;fragmento&lt;/strong&gt; empieza con &lt;code&gt;#&lt;/code&gt; y apunta a una parte específica del recurso, como una sección dentro de una página HTML.&lt;/p&gt;

&lt;p&gt;Ejemplo: 👉🏾 &lt;code&gt;https://www.ejemplo.com/pagina.html#seccion3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👀 &lt;strong&gt;Importante&lt;/strong&gt;: el fragmento &lt;strong&gt;no se envía al servidor&lt;/strong&gt;, lo interpreta el navegador. Sirve, por ejemplo, para desplazarte automáticamente a un ancla o una parte específica del contenido.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;CONSIDERACIONES CLAVE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Antes de cerrar, repasemos algunos detalles importantes definidos por el RFC:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Codificación:&lt;/strong&gt; los caracteres no válidos se codifican con &lt;code&gt;%&lt;/code&gt; y dos dígitos hexadecimales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URLs relativas:&lt;/strong&gt; pueden omitir el &lt;em&gt;scheme&lt;/em&gt; y el &lt;em&gt;host&lt;/em&gt;, tomando el contexto actual.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Normalización:&lt;/strong&gt; los navegadores pueden ajustar mayúsculas, puntos o rutas internas automáticamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seguridad:&lt;/strong&gt; evita incluir datos sensibles en la URL, ya que pueden quedar registrados en logs o historiales.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;CONCLUSIÓN&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Y eso es, en esencia, &lt;strong&gt;cómo está compuesta una URL según el estándar RFC 3986&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Detrás de cada dirección que escribes en el navegador hay una estructura cuidadosamente diseñada que permite que la web funcione de forma ordenada, segura y predecible.&lt;/p&gt;

&lt;p&gt;Si estás construyendo APIs, desarrollando front-ends o simplemente quieres entender cómo viaja la información por Internet, dominar este tema te da una base sólida para todo lo que viene después.&lt;/p&gt;

&lt;p&gt;💬 Cuéntame en los comentarios:&lt;/p&gt;

&lt;p&gt;¿Ya conocías todas las partes de una URL y su función?&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🧩 Cómo solucionar problemas de integridad en dependencias de Node.js</title>
      <dc:creator>Sanders Gutérrez</dc:creator>
      <pubDate>Mon, 13 Oct 2025 07:40:30 +0000</pubDate>
      <link>https://dev.to/untalsanders/como-solucionar-problemas-de-integridad-en-dependencias-de-nodejs-2p1d</link>
      <guid>https://dev.to/untalsanders/como-solucionar-problemas-de-integridad-en-dependencias-de-nodejs-2p1d</guid>
      <description>&lt;h2&gt;
  
  
  💡 Introducción: el día que NPM decide no cooperar
&lt;/h2&gt;

&lt;p&gt;Estás instalando tus dependencias como siempre. Escribes &lt;code&gt;npm install&lt;/code&gt;, presionas Enter, esperas unos segundos (o una eternidad 😴)... y de pronto, aparece el mensaje:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm ERR! code EINTEGRITY
npm ERR! sha512-abc123... integrity checksum failed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Respiras hondo... Vuelves a intentarlo... Nada... El mismo error... 😤😡🤬&lt;/p&gt;

&lt;p&gt;Este tipo de problema ---tan frustrante como misterioso--- ocurre cuando &lt;strong&gt;el hash de integridad de un paquete descargado no coincide con el esperado&lt;/strong&gt;. En otras palabras: NPM detecta que el archivo no es exactamente el mismo que debería ser según el registro oficial.&lt;/p&gt;

&lt;p&gt;Aunque muchas guías recomiendan borrar &lt;code&gt;node_modules&lt;/code&gt; o limpiar la&lt;br&gt;
caché, existe un método &lt;strong&gt;no sé si más rápido, no sé si más limpio, pero definitivamente más preciso&lt;/strong&gt;:&lt;br&gt;
&lt;strong&gt;corregir el hash de integridad manualmente&lt;/strong&gt; en el &lt;code&gt;package-lock.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;En este artículo, aprenderás a hacerlo paso a paso, con ejemplos reales y también te lo explico en video aquí &lt;em&gt;&lt;a href="https://www.youtube.com/watch?v=LLh9fO6gL6o" rel="noopener noreferrer"&gt;"Cómo solucionar problemas de integridad en dependencias de Node.js"&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  🔍 Paso 1: Identificar la dependencia que está fallando
&lt;/h2&gt;

&lt;p&gt;El primer paso es leer con atención el mensaje de error.&lt;br&gt;
NPM te dirá &lt;strong&gt;qué dependencia está causando el problema&lt;/strong&gt;. Por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm ERR! EINTEGRITY: sha512 checksum failed &lt;span class="k"&gt;for &lt;/span&gt;follow-redirects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto significa que el paquete &lt;code&gt;follow-redirects&lt;/code&gt; descargado no coincide con el que el lockfile esperaba.&lt;/p&gt;

&lt;p&gt;También suele aparecer una línea que indica dónde encontrar el registro completo del error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;See the log &lt;span class="k"&gt;for &lt;/span&gt;details: /ruta/al/npm-debug.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ese archivo (&lt;code&gt;npm-debug.log&lt;/code&gt;) contiene el detalle completo, pero en&lt;br&gt;
general &lt;strong&gt;con el nombre del paquete basta para actuar&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  🧭 Paso 2: Localizar el paquete en el &lt;code&gt;package-lock.json&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Una vez identificado el nombre, abrimos el archivo &lt;code&gt;package-lock.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Este archivo guarda información exacta sobre las versiones y hashes de integridad de cada dependencia.&lt;/p&gt;

&lt;p&gt;Busca el nombre del paquete, por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"follow-redirects"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.15.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"resolved"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"integrity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha512-XYZ123..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El campo &lt;code&gt;"integrity"&lt;/code&gt; es el que NPM compara al instalar.&lt;/p&gt;

&lt;p&gt;Si ese valor no coincide con el que el registro oficial tiene, el&lt;br&gt;
proceso falla.&lt;/p&gt;
&lt;h2&gt;
  
  
  ⚙️ Paso 3: Obtener el hash de integridad correcto
&lt;/h2&gt;

&lt;p&gt;Ahora que sabemos cuál es el paquete problemático, debemos obtener el &lt;strong&gt;hash correcto&lt;/strong&gt; directamente desde el registro oficial de NPM.&lt;/p&gt;

&lt;p&gt;Ejecuta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm show follow-redirects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El comando mostrará información como esta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dist&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;integrity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sha512-AbCdEfGh...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El valor que ves ahí es &lt;strong&gt;el hash oficial&lt;/strong&gt;, calculado a partir del&lt;br&gt;
paquete original en el registro.&lt;/p&gt;

&lt;p&gt;Esa es la cadena que debe reemplazar al valor incorrecto del&lt;br&gt;
&lt;code&gt;package-lock.json&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  ✏️ Paso 4: Actualizar el hash manualmente
&lt;/h2&gt;

&lt;p&gt;Con el hash correcto copiado, regresa al &lt;code&gt;package-lock.json&lt;/code&gt; y reemplaza el valor anterior por el nuevo.&lt;/p&gt;

&lt;p&gt;En algunos proyectos, la misma dependencia puede aparecer varias veces (por ejemplo, como dependencia de otro paquete).&lt;/p&gt;

&lt;p&gt;Por eso, te recomiendo &lt;strong&gt;buscar todas las apariciones del nombre del paquete&lt;/strong&gt; y reemplazar el campo &lt;code&gt;"integrity"&lt;/code&gt; en cada una.&lt;/p&gt;

&lt;p&gt;Ejemplo de corrección:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"node_modules/follow-redirects"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.15.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"resolved"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"integrity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha512-AbCdEfGh..."&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;←&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;nuevo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;hash&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Guarda el archivo.&lt;br&gt;
No es necesario borrar &lt;code&gt;node_modules&lt;/code&gt; todavía.&lt;/p&gt;
&lt;h2&gt;
  
  
  🔁 Paso 5: Reinstalar dependencias
&lt;/h2&gt;

&lt;p&gt;Con el &lt;code&gt;package-lock.json&lt;/code&gt; corregido, ejecuta nuevamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NPM descargará los paquetes y verificará los hashes actualizados.&lt;br&gt;
Si todo fue reemplazado correctamente, el error de integridad&lt;br&gt;
desaparecerá para esa dependencia.&lt;/p&gt;

&lt;p&gt;💬 &lt;em&gt;En el video te muestro claramente cómo, tras corregir el hash de &lt;code&gt;follow-redirects&lt;/code&gt;, el error deja de aparecer.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🧩 Paso 6: Aplicar el mismo método a otras dependencias
&lt;/h2&gt;

&lt;p&gt;En algunos casos, el error se repite con otros paquetes.&lt;br&gt;
Por ejemplo, la librería &lt;code&gt;semver&lt;/code&gt; (una dependencia muy usada para el control de versiones).&lt;/p&gt;

&lt;p&gt;El procedimiento es el mismo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm show semver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copia el valor de &lt;code&gt;dist.integrity&lt;/code&gt;, busca todas las apariciones de&lt;br&gt;
&lt;code&gt;semver&lt;/code&gt; en el &lt;code&gt;package-lock.json&lt;/code&gt; y reemplázalo.&lt;br&gt;
Luego vuelve a ejecutar &lt;code&gt;npm install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Si la dependencia es indirecta (es decir, pertenece a otra librería), puede aparecer varias veces dentro del lockfile.&lt;br&gt;
Asegúrate de reemplazar todas las coincidencias.&lt;/p&gt;
&lt;h2&gt;
  
  
  🧼 Paso 7: Verificar que todo funciona correctamente
&lt;/h2&gt;

&lt;p&gt;Una vez actualizados los hashes, ejecuta de nuevo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si el error original ya no aparece, ¡felicitaciones! 🎉&lt;br&gt;
Has corregido manualmente un problema de integridad en tus dependencias.&lt;/p&gt;

&lt;p&gt;Si aún aparece un error distinto, repite el proceso para ese nuevo&lt;br&gt;
paquete.&lt;/p&gt;

&lt;p&gt;A veces, varios paquetes presentan el mismo tipo de inconsistencia si se descargaron bajo una conexión inestable o si el lockfile fue modificado manualmente.&lt;/p&gt;
&lt;h2&gt;
  
  
  🧠 Entendiendo por qué ocurre este error
&lt;/h2&gt;

&lt;p&gt;El error &lt;code&gt;EINTEGRITY&lt;/code&gt; aparece cuando el &lt;strong&gt;checksum (hash SHA512)&lt;/strong&gt;&lt;br&gt;
calculado a partir del paquete descargado &lt;strong&gt;no coincide con el hash&lt;br&gt;
registrado en el lockfile&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esto puede deberse a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Descargas interrumpidas o corruptas.&lt;/li&gt;
&lt;li&gt;  Caché dañada de NPM.&lt;/li&gt;
&lt;li&gt;  Lockfile desactualizado tras una actualización manual del
&lt;code&gt;package.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Inconsistencias entre versiones de NPM en distintos entornos (local vs CI/CD).&lt;/li&gt;
&lt;li&gt;  Mirrors de registro (proxies o caches) que devuelven paquetes
alterados. (OJO - Ten mucho cuidado con esto 👀🧐🕵🏾).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Corregir manualmente el hash es una solución inmediata y precisa, pero también conviene &lt;strong&gt;revisar la causa raíz&lt;/strong&gt; para evitar que se repita.&lt;/p&gt;
&lt;h2&gt;
  
  
  ⚡ Alternativas si el error persiste
&lt;/h2&gt;

&lt;p&gt;Si luego de corregir los hashes manualmente los errores continúan,&lt;br&gt;
prueba lo siguiente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verificar y limpiar caché de NPM&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;npm cache verifylternativas si el error persiste
npm cache clean &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Eliminar &lt;code&gt;node_modules&lt;/code&gt; y el lockfile&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; node_modules
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; package-lock.json
npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Usar versiones compatibles de NPM&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; npm@latest
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Evitar conflictos entre gestores&lt;/strong&gt; &lt;br&gt;&lt;br&gt;
No mezcles &lt;code&gt;npm&lt;/code&gt; y &lt;code&gt;yarn&lt;/code&gt; en el mismo proyecto.&lt;br&gt;&lt;br&gt;
Mantén un solo archivo de lock (&lt;code&gt;package-lock.json&lt;/code&gt; o &lt;code&gt;yarn.lock&lt;/code&gt;, nunca ambos).&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;

&lt;h2&gt;
  
  
  🧩 Ejemplo completo resumido
&lt;/h2&gt;

&lt;p&gt;1️⃣ Identificar paquete problemático - &lt;code&gt;npm install&lt;/code&gt;&lt;br&gt;
  2️⃣ Buscar el hash actual - Editar &lt;code&gt;package-lock.json&lt;/code&gt;&lt;br&gt;
  3️⃣ Obtener hash correcto - &lt;code&gt;npm show &amp;lt;paquete&amp;gt;&lt;/code&gt;&lt;br&gt;
  4️⃣ Actualizar hash manualmente - Editar &lt;code&gt;package-lock.json&lt;/code&gt;&lt;br&gt;
  5️⃣ Reinstalar dependencias - &lt;code&gt;npm install&lt;/code&gt;&lt;br&gt;
  6️⃣ Verificar resultados - Revisión en consola&lt;/p&gt;

&lt;h2&gt;
  
  
  🧱 Buenas prácticas para prevenir estos errores
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Usa versiones estables de Node y NPM.&lt;/strong&gt;&lt;br&gt;
Documenta en tu proyecto las versiones recomendadas con &lt;code&gt;.nvmrc&lt;/code&gt; o &lt;code&gt;"engines"&lt;/code&gt; en el &lt;code&gt;package.json&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Evita editar manualmente el lockfile&lt;/strong&gt;, salvo para este tipo de corrección puntual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Usa &lt;code&gt;npm ci&lt;/code&gt; en entornos de integración continua (CI/CD)&lt;/strong&gt; para instalaciones limpias y reproducibles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Controla las actualizaciones automáticas&lt;/strong&gt;: si tu editor o entorno actualiza dependencias sin sincronizar el lockfile, podrías romper la integridad.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏁 Conclusión
&lt;/h2&gt;

&lt;p&gt;Los errores de integridad en Node.js pueden parecer complejos, pero en realidad son una medida de seguridad que protege tu proyecto frente a paquetes corruptos o manipulados.&lt;/p&gt;

&lt;p&gt;En lugar de eliminar todo el entorno, puedes resolver el problema&lt;br&gt;
&lt;strong&gt;editando directamente el &lt;code&gt;package-lock.json&lt;/code&gt;&lt;/strong&gt; con el hash correcto obtenido de &lt;code&gt;npm show&lt;/code&gt;. Así evitas reinstalaciones innecesarias y conservas la estabilidad de tu proyecto.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 En resumen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Identifica el paquete con error.&lt;/li&gt;
&lt;li&gt;  Obtén el hash correcto desde &lt;code&gt;npm show&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Reemplázalo en tu lockfile.&lt;/li&gt;
&lt;li&gt;  Reinstala y verifica.&lt;/li&gt;
&lt;li&gt;  Evita mezclar gestores y mantén tu entorno limpio.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sencillo, directo y eficaz. 💪🏾&lt;/p&gt;

&lt;h2&gt;
  
  
  🎥 CTA --- Aprende más en mi canal
&lt;/h2&gt;

&lt;p&gt;Si te gustó esta explicación, te invito a visitar mi canal de YouTube, donde explico paso a paso este proceso en video y comparto &lt;strong&gt;tutoriales sobre Node.js, NPM, y desarrollo web moderno&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉🏾 &lt;strong&gt;&lt;a href="https://www.youtube.com/@untalsanders" rel="noopener noreferrer"&gt;Visita el canal aquí&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;(&lt;a href="https://www.youtube.com/@untalsanders" rel="noopener noreferrer"&gt;https://www.youtube.com/@untalsanders&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>npm</category>
      <category>javascript</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
