Стабильный релиз Node v5

7ed2ade481c54f4982072a7fd216a2fe.jpg
На прошлой неделе состоялся релиз Nodejs v5. Эта ветка включает в себя порцию новых возможностей и будет развиваться параллельно c веткой Node v4.x, которая яляется стабильной LTS веткой с длительным сроком поддержки в 30 месяцев. Релизы Node v5.x будут осуществляться раз в 8 месяцев.

Если вы решитесь перейти на эту версию, то вам стоит знать, что это потребует пересборки установленных сторонних расширений, а так же есть изменения, гарушающие обратную совместимость. Имейте это в виду.

Подробности под катом.
И так, что же нового:

  • Разработчики перешли на новую версию движка V8: 4.6.85.25.
  • npm обновлён до версии 3.3.6.
  • Добавлена возможность передачи файловых дескрипторов в вызовы функций fs.readFile*(), fs.writeFile*() и fs.appendFile*().
  • Изменён формат вывода console.time
  • В объекте buffer удалены типы кодировок 'raw' и 'raws'
  • Прекращена поддержка вызовов require.paths, util.p(), util.inherits(), require.registerExtension()
  • Ужесточены требования к именам методов и заголовков HTTP
  • В модуль tls добавлена поддержка ALPN. Теперь минимальный размер ключа DH для tls.connect() увеличен до 1024 бит.
  • Прекращена поддержка модуля _linklist.


Полный перечень изменений можно найти в официальном блоге по ссылке nodejs.org/en/blog/release/v5.0.0

Поддержка новых синтаксических инструкций ES6


Поддержка new.target
Оператор new теперь используется не только для создания новых объектов, но и для возможности контролировать создаваемый объект и получать информацию об объекте. Оператор new.target вернет ссылку на конструктор функции при создании объекта. при обычном вызове функции new.target возвращает undefined.Примеры использования
new.target in function calls

function Foo() {
  if (!new.target) throw "Foo() must be called with new";
  console.log("Foo instantiated with new");
}

Foo(); // throws "Foo() must be called with new"
new Foo(); // logs "Foo instantiated with new"

new.target in constructors


class A {
  constructor() {
    console.log(new.target.name);
  }
}

class B extends A { constructor() { super(); } }

var a = new A(); // logs "A"
var b = new B(); // logs "B"

Поддержка Spread operator
Spread operator позволяет разворачивать выражения в случаях, где предусмотрено использование нескольких аргументов, таких как вызовы функций или в качестве литералов массивов.

При вызовах функций:

f(...iterableObj);

В литералах массивов:

[...iterableObj, 4, 5, 6]

При деструктивном присваивании:

[a, b, ...iterableObj] = [1, 2, 3, 4, 5];

Где может использоваться

let arr1 = [0, 1, 2],
     arr2 = [3, 4, 5];

//Раньше мы писали так
Array.prototype.push.apply(arr1, arr2);

//Теперь это же можно написать так
arr1.push(...arr2);

У разработчиков уже в планах выпуск новой версии Node v6, который запланирован на апрель 2016 года. Эта версия уже должна будет получить статус LTS.

© Habrahabr.ru