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

El fin de una era: Microsoft Edge se une a Chromium

El fin de una era: Microsoft Edge se une a Chromium

Microsoft Edge utiliza desde hoy Chromium como base de su desarrollo, por lo que en la práctica da soporte a prácticamente todas los estándares y tecnologías que Google Chrome. Después de tantos años desarrollando tecnologías propias, Microsoft se rinde y se une al navegador más extendido. Parece increíble, pero es cierto.

Datos inmutables en Javascript

Datos inmutables en Javascript

En Javascript todo parece mutable, es decir, que se puede cambiar, pero lo cierto es que también nos ofrece varios mecanismos para conseguir que los datos que manejamos, especialmente los objetos, sean inmutables. Te invitamos a descubrir cómo…

Copiar objetos en Javascript

Copiar objetos en Javascript

Copiar objetos no es algo sencillo, incluso se podría decir que en si mismo no es posible, ya que el concepto «copiar» no entra dentro del paradigma de los objetos. No obstante, por medio de instrucciones como Object.assign() hemos aprendido como obtener objetos con las mismas propiedades, pero está técnica no se puede aplicar a todos los tipos de objetos disponibles en Javascript. Vamos a ver cómo podemos copiar cualquier tipo de objeto…

Descubre los Javascript Array Internals

Descubre los Javascript Array Internals

El Array es una de las estructuras más utilizadas en Javascript y no siempre bien comprendida. Hoy os invitamos a analizar el comportamiento interno de este objeto y descubrir cómo Javascript implementa las diferente acciones con los Array y que operaciones internas se realizan en cada caso.