14

Te presentamos la nueva versión de Node.js

21837Puntos

hace 7 años

Node.jsliberó la versión 8.0.0, esta nueva versión trae varias mejores internas, nuevas APIs y hasta una nueva versión de npm.

[email protected]

npm inc. hace poco anunció la versión 5.0.0 de npm, el gestor de dependencias por defecto de Node.js (si no usan yarn). Esta nueva versión de npm trae una gran mejora de velocidad que lo compara mucho con Yarn. Además de otras características interesantes.

Guardado automático al package.json

Hasta ahora al instalar una dependencia con npm install <modulo> teníamos que agregar --save o -S para agregarlo a nuestro package.json. Desde esta versión por defecto se van a agregar como dependencias de nuestro proyecto. Si en dado caso queremos evitar eso tenemos que agregar --no-save para evitar.

Las dependencias de desarrollo u opcionales siguen igual, simplemente agregar --save-dev o -D y --save-optional o -O y listo.

Lockfile

Una característica de Yarn que ayuda a evitar problemas de que las dependencias instaladas en dos computadoras sean diferentes es el yarn.lock. Este archivo garantiza que todos los que instalen un proyecto tengan el mismo árbol de dependencias en node_modules, también ayuda a la velocidad al tener pre-definido que dependencias y subdependencias vamos a necesitar.

En esta versión de npm también vamos a tener un lockfile llamado package-lock.json, que cumple el mismo objetivo. Recuerden no ignorar este archivo en Github.

Nueva cache

Reescribieron cómo funciona la cache de npm, eso quiere decir que si ya habían usado npm y tenían un módulo en cache esta ya no funciona. A cambio, la nueva cache va a garantizarnos que sea más rápido y funcione mejor, lo que ayuda a reducir la velocidad de instalación de dependencias de npm.

Node.js

Ahora hablemos de Node.js v8.0.0. Esta nueva versión que viene a sustituir a la v7 como la versión actual y va a sustituir a la v6 como LTS en octubre de este año.

V8 5.8

Esta nueva versión de Node.js viene con la versión 5.8 de V8, el motor de JavaScript de Chrome y que usa Node.js internamente. Este incluye mejoras de rendimiento al ejecutar código de JavaScript y sienta las bases para integrar TurboFan e Ignition en Node.js. Ignition es un nuevo intérprete de JavaScript de más bajo nivel y rápido y TurboFan es un optimizador de los compiladores de V8 que va a hacer a que JS se ejecute más rápido. Por si no era ya suficientemente rápido 😛.

N-API

También incluye N-API una nueva API de Node.js para trabajar con módulos nativos (en C y C++) que va a permitir que un módulo se compile una sola vez y funcione para múltiples versiones de Node.js.

WHATWG URL parser

Desde la versión 7.x se viene trabajando en un parser experimental de URLs basado en la especificación URL de la WHATWG. Desde ahora ya no es más experimental y está completamente soportada por Node.js.

const URL = require('url').URL;
const myUrl = new URL('/a/path', 'https://example.org/');

Esta nueva implementación usa el mismo API que se usa en navegadores como Chrome, Safari, Firefox y Edge, haciendo más fácil reusar código que trabaje con URLs.

Mejor soporte a promesas

La versión 8.0.0 incluye el nuevo API utils.promisify() que permite envolver el API de callbacks estándar de Node.js para usar promesas. Por ejemplo:

const fs = require('fs');
const { promisify } = require('util');

const readFile = promisify(fs.readFile);

readFile('/algun/archivo')
	.then(data => { /** ... **/ })
	.catch(err => { /** ... **/ });

Esto combinado con un soporte completo a Async/Await permite trabajar mucho más fácil flujos de datos asíncronos.

Cambios a console

Los métodos console.log y console.error permiten enviar datos directamente a stdout y stderr. Hasta ahora si ocurría un error al tratar de ejecutar estas funciones causaba que nuestra aplicación de Node.js se rompa. Desde ahora esto ya no va a ocurrir y cualquier error al tratar de usar uno de estos métodos simplemente va a ser ignorado de forma silenciosa.

Códigos de error estáticos

Y hablando de errores, se están empezando a agregar código de error estáticos a muchos de los posibles mensajes de error generados por Node.js. Estos códigos se muestran de dos formas:

  1. Usando la propiedad code en las instancias del objeto Error
  2. Imprimiendo en consola [ERR_CODE] en el stacktrace de un error.

Por ejemplo si llamamos assert(false) va a generar el siguiente AssertionError:

> assert(false)
AssertionError [ERR_ASSERTION]: false == true
	at repl:1:1
	at ContextifyScript.Script.runInThisContext (vm.js:44:33)
	at REPLServer.defaultEval (repl.js:239:29)
	at bound (domain.js:301:14)
	at REPLServer.runBound [as eval] (domain.js:314:12)
	at REPLServer.onLine (repl.js:433:10)
	at emitOne (events.js:120:20)
	at REPLServer.emit (events.js:210:7)
	at REPLServer.Interface._onLine (readline.js:278:10)
	at REPLServer.Interface._line (readline.js:625:8)

Los códigos de error pueden ser buscados rápidamente en la documentación del API de Node.js en la sección de errores. Por ejemplo, el código de error ERR_INVALID_CALLBACK lo pueden leer en https://nodejs.org/dist/latest-v8.x/docs/api/errors.html#errors_err_invalid_callback.

Redirección de las advertencias

Advertencias que ocurran en nuestra aplicación, como los avisos de obsolencia de un API, ahora pueden redirigirse a un archivo externo simplemente agregando --redirect-warnings={archivo} al correr nuestra aplicación o definiendo la variable de entorno NODE_REDIRECT_WARNINGS={archivo}. De esta forma es posible evitar que estas advertencias aparezcan en la consola y en vez de eso queden en un archivo estático que podemos analizar luego, así es posible limpiar un poco la consola de logs que no son errores.

Cambios en el depurador

La antigúa forma de depurar una aplicación de Node.js fue removida. En cambio node-inspect se integró directo al núcleo de Node.js. ¿Cómo lo usamos? Simplemente al correr una aplicación de Node.js agregamos --inspect.

> node --inspect index.js

Luego vamos a Chrome y navegamos a about:inspect donde vamos a ver nuestro proceso de Node.js y podemos abrir las herramientas de desarrollo de Chrome para depurar nuestro código.

Palabras finales

Esta versión trae muchas mejoras tanto en npm como en Node.js, aunque como siempre con todos los cambios de versiones de Node.js hay que tener cuidado ya que algunas dependencias de terceros (o incluso código nuestro) pueden romperse debido a los cambios de API. Sin embargo esta versión trae mejoras interesantes que pueden ayudarnos muchos al desarrollar.

Sergio Daniel
Sergio Daniel
sergiodxa

21837Puntos

hace 7 años

Todas sus entradas
Escribe tu comentario
+ 2
1
2806Puntos

Podrias ayudarme a entender cómo funciona el Package o cual es verdaderamente su uso? Gracias Sergio !