Seleccionar página

Esta semana santa ha sido bastante movida en el complejo mundo de las dependencias entre paquetes NPM. Un programador decidió retirar una pequeña función de apenas unas lineas de código y como consecuencia muchos paquetes, algunos tan importantes como el propio NPM o Babel, dejaron de funcionar.

El paquete en cuestion es pad-left, que ofrece una funcion para añadir ceros por la izquiera al convertir un entero a cadena de caracteres. Esta pequeña función es en la práctica extremadamente popular y tiene millones de descargas cada mes, sobre todo por ser utilizada como dependencia interna en algunos de los paquetes más populares de NPM.

Parece ser que su creador, Azer Koçulu, fue víctima una desagradable actuación por parte de NPM sobre la publicación de un paquete denominado Kik y que molestó a kik.com, cuyo nombre coindice con el paquete publicado (también puedes leer el punto de vista de Kik de todo este embrollo).

Por todo ello, seguramente bastante enfadado por la actuación de NPM, Azer decidió dar de baja todos sus paquetes publicados en NPM y como consecuencia «el mundo tembló» ya que miles de descargas de paquetes muy populares dejaron de funcionar sin explicación aparecente.

Este es el pequeño código que, de repende, dejaba de estar disponible:

module.exports = leftpad;

function leftpad (str, len, ch) {
  str = String(str);

  var i = -1;

  if (!ch && ch !== 0) ch = ' ';

  len = len - str.length;

  while (++i < len) {
    str = ch + str;
  }

  return str;
}

Para «resolver» en problema, Laurie Voss, CTO y cofundador de NPM, tomó la decisión sin precedentes de restaurar el paquete borrado. Cuando un paquete es eliminado no es posible volverlo a restaurar, pero en este caso se ha tomado una medida excepcional, tal y como explicó Laurie en un tweet.

Aunque el problema parece solventado, la verdad es que deja al descubierto la fragidad del sistema de dependencias encadenadas. La mayor parte de nosotros usamos los paquetes sin preocuparnos de que dependencias tienen y, aunque instalen decenas de paquetes prácticamente desconocidos, confiamos que todo funcionará correctamente, ahora y en el futuro.

Como hemos podido comprobar, el desagradable incidente con un programador de Oakland y una empresa Ontario, puede hacer templar los cimientos de miles de paquetes y volver locos a muchos desarrolladores que no entendíamos que estaba pasando al intentar instalar paquetes que hasta hace unos dias funcionaban sin problemas.

Es verdad que el código del paquete pad-left no es muy complejo, pero es habitual pensar que si algo está ya escrito y funciona bien, por qué no utilizarlo. Bueno, quizas debamos valorar más despacio que utilizamos, que origen tiene y que futuro le espera. Este ha sido un caso a gran escala y la propia NPM ha actuado, pero en otros casos más pequeños y menos conocidos podemos encontrarnos con un problema de dificil solución. Es posible que esto sólo haya sido una anecdota, pero da que pensar.

¿Qué opináis? ¿Cómo deberíamos actuar? ¿Debemos confiar o desconfiar de los paquetes y sus dependencias?

Novedades

Template a fondo

Hay dos formas estándar de crear contenido en un componente de forma flexible: la etiqueta template, que se considera como uno de los pilares de los Web Components y las template string de Javascript, que son una buena alternativa para generar el Shadow DOM con interpolación de datos.

Light DOM a fondo

El Light DOM es un espacio compartido entre nuestro componente web y el DOM general, que podemos utilizar para insertar contenido o configurar nuestro componente. Es una muy interesante característica que debemos conocer.

Shadow DOM a fondo

Para que los componentes web no colisionen unos con otros es muy útil utilizar el Shadow DOM para aislar el DOM y el CSS de cada componente. Esta característica se puede aplicar también a elementos HTML sin necesidad de utilizar Custom Elements, pero es con estos donde cobra todo su potencial. Demos un repaso profundo a las capacidades del Shadow DOM.

HTMLElement a fondo

HTMLElement es una pieza clave, ya que de él heredan todos los componentes web, pero en muchas ocasiones no conocemos bien sus características. Os invitamos a dar un repaso a fondo a sus capacidades y descubrir cómo sacarle todo el partido en nuestros componentes.