¿Qué hay de nuevo en Node.js 6?

Node.js 6 admite el 96% de las funciones de ES6, en comparación con el 58% admitido por Node.js 5.11 [1]. Estas son algunas de las adiciones de sintaxis favoritas importantes y mis personales:

Parámetros de función predeterminados

función foo (a = 1, b = 2) {
console.log (a, b);
}
foo (a = 3); // imprime “3 2”

Desestructuración

función foo ({a, b}, [c, d]) {
console.log (a, b, c, d);
}
foo ({a: 1, b: 2}, [3, 4]); // imprime “1 2 3 4”

Parámetros de descanso

Esto fue admitido en Node.js 5, pero ahora no requiere una bandera de armonía.

función foo (a, … b) {
console.log (a, b);
}
foo (1, 2, 3, 4, 5); // imprime “1 [2, 3, 4, 5]”

Clase

Esto también fue compatible con Node.js 5, pero ahora no requiere el indicador de armonía.

clase Foo {
constructor (foo) {
console.log (foo);
}
}
nuevo Foo (1); // imprime “1”

Dejar

Esto también fue compatible con Node.js 5, pero ahora no requiere ‘uso estricto’.

dejar a = 2;
{
dejar a = 1;
console.log (a); // imprime 1
}
console.log (a); // imprime 2

También hay muchos cambios en la biblioteca estándar. Puedes verlos aquí.

[1] Soporte para Node.js ES2015 / ES6

Hay muchas modificaciones menores en las bibliotecas principales, como se ilustra en el Registro de cambios.

Sin embargo, más sustancialmente, Node.js 6 incorpora la última versión del motor V8 Javascript, lo que incluye soporte para un grupo completo, 92% para ser exactos, de las nuevas características de ES2015 / ES6. Por el contrario, la versión anterior de Node.js (5.11.0) solo admitía el 47% de las funciones de ES2015.

Puede ver una buena ilustración de las funciones que admite aquí.

Esto significa que Node.js 6 ahora admitirá un montón de nuevas funciones de lenguaje Javascript que hasta ahora solo estaban disponibles con un transpilador como Babel que convertiría esas funciones ES2015 en un código ES5 compatible que se ejecutaría en versiones anteriores de Node.js.

Entonces, en Node.js 6, los desarrolladores podrán hacer uso de estas nuevas y geniales funciones de lenguaje sin tener que ejecutar primero su código a través de un transpiler.

Desde el enlace de github

  • Buffer
  • Se han agregado nuevos constructores de búfer # 4682 y # 5833.
  • Los constructores existentes Buffer () y SlowBuffer () han quedado en desuso en los documentos # 4682 y # 5833.
  • Las API de búfer previamente obsoletas se eliminan # 5048, # 4594.
  • Manejo mejorado de errores # 4514.
  • Se ha agregado el método Buffer.prototype.lastIndexOf () # 4846.
  • Racimo
    • Trabajador emitido como primer argumento en el ‘mensaje’ evento # 5361.
    • La propiedad worker.exitedAfterDisconnect reemplaza a worker.suicide # 3743.
  • Consola
    • Llamar a console.timeEnd () con una etiqueta desconocida ahora emite una advertencia de proceso en lugar de arrojar # 5901.
  • Cripto
    • Manejo de errores mejorado # 3100, # 5611.
    • Enlaces de clase de certificado simplificado # 5382.
    • Control mejorado sobre el modo FIPS # 5181.
    • La sobrecarga de resumen pbkdf2 está en desuso # 4047.
  • Dependencias
    • Reintroduzca el soporte de compilación de c-ares compartido # 5775.
    • V8 actualizado a 5.0.71.35 # 6372.
  • DNS
    • Agregue la API dns.resolvePtr () para consultar registros PTR de DNS simples # 4921.
  • Dominios
    • Borrar la pila cuando no hay controlador de errores # 4659.
  • Eventos
    • TheEventEmitter.prototype._eventsobject ya no hereda de Object.prototype # 6092.
    • Se han agregado los métodos TheEventEmitter.prototype.prependListener () yEventEmitter.prototype.prependOnceListener () # 6032.
  • Sistema de archivos
    • Los métodos fs.realpath () y fs.realpathSync () se han actualizado para utilizar una implementación más eficiente basada en libuv. Este cambio incluye la eliminación del argumento de caché y el método puede arrojar nuevos errores # 3594.
    • Las API de FS ahora pueden aceptar y devolver rutas como Buffers # 5616.
    • Mejoras en el manejo de errores y verificación de tipos # 5616, # 5590, # 4518, # 3917.
    • La interfaz de cadena de fs.read está en desuso # 4525.
  • HTTP
    • ‘clientError’ ahora se puede usar para devolver errores personalizados desde un servidor HTTP # 4557.
  • Módulos
    • El directorio actual ahora tiene prioridad para las búsquedas locales # 5689.
    • Los enlaces simbólicos se conservan cuando se requieren los módulos # 5950.
  • Red
    • Las sugerencias de DNS ya no se establecen implícitamente en # 6021.
    • Manejo mejorado de errores y verificación de tipos # 5981, # 5733, # 2904.
  • OS X
    • MACOSX_DEPLOYMENT_TARGET se ha incrementado hasta 10.7 # 6402.
  • Camino
    • Comprobación de tipo mejorada # 5348.
  • Proceso
    • Introducir advertencias de proceso API # 4782.
    • Lanza una excepción cuando la no función pasa a nextTick # 3860.
  • Querystring
    • El objeto devuelto por byquerystring.parse () ya no hereda de Object.prototype # 6055.
  • Readline
    • La información clave se emite incondicionalmente # 6024.
    • El historial ahora se puede deshabilitar explícitamente # 6352.
  • REPL
    • La asignación a _ emitirá una advertencia # 5535.
    • Las expresiones ya no se completarán cuando eval falla # 6328.
  • Temporizadores
    • Fallar temprano cuando la devolución de llamada no es una función # 4362.
  • Corrientes
    • null ahora es un fragmento no válido para escribir en modo objeto # 6170.
  • TLS
    • Cambie el nombre de ‘clientError’ a ‘tlsClientError’ # 4557.
    • SHA1 utilizado para sessionIdContext # 3866.
  • TTY
    • El contenedor setRawMode previamente desaprobado se elimina # 2528.
  • URL
    • El nombre de usuario y la contraseña serán eliminados por url.resolve () si el host cambia # 1480.
  • Util
    • Cambios en el formato de objeto Error # 4582.
    • El método util._extend () ha quedado en desuso # 4903
    • El método util.log () ha quedado en desuso # 6161.
  • Ventanas
    • Windows XP y Vista ya no son compatibles # 5167.
  • Zlib
    • Se han realizado múltiples mejoras en el procesamiento de Zlib # 5883 y # 5707.