Вышел в свет Node.JS v6.0

Сегодня увидела свет версия 6.0. Изменений много, в том числе за счет обновления версии v8 (до v5.0), при этом некоторые из них могут поломать ваш код. О том какие нововведения вас ждут, читайте под катом.

В октябре этого года ветка v6.x станет новой активной LTS версией и её поддержка продлится до апреля 2018 года, а поддержка текущей LTS ветки Node.js v4 'Argon' продлится до апреля 2017. Поддержка же v5 продлится еще два месяца, чтобы разработчики использующие эту версию смогли перейти на v6. Поддержка v0.10 и v0.12 будет полностью прекращена.


Изменения API

Выдержка из changelog наиболее значимых изменений:


Buffer

Конструктор объекта Buffer изменил свое поведение. Старый конструктор получил статус deprecated, а его поведение перешло в отдельные методы:

// Было
new Buffer(size);

// Стало
Buffer.alloc(size);

По умолчанию буфер заполняется нулями, если это не требуется, используйте Buffer.allocUnsafe. Для инициализации буфера из строки или других буферов появился метод Buffer.from:

// Было
new Buffer(str, 'utf8');

// Стало
Buffer.from(str, 'utf8');


EventEmitter

Объект EventEmitter получил два новых метода prependListener и prependOnceListener, оба метода добавляют новый обработчик события в начало списка обработчиков события.

var ee = new EventEmitter();

var result = [];
ee.on('event', () => result.push(1));
ee.prependListener('event', () => result.push(2));
ee.emit('event');

result; // -> [2, 1]


FileSystem

Методы fs.realpath и fs.realpathSync теперь использует обновленную логику libuv и может выбрасывать дополнительные ошибки. Так же на вход этим методам можно подавать Buffer.


HTTP

HTTP-сервер теперь генерирует событие clientError на ошибку клиента. Пример можно увидеть здесь.


Process

Представлен механизм предупреждения о проблемах. Вместо вывода в stderr, теперь можно передавать предупреждения в специальный метод:

process.emitWarning('something goes wrong');

Так же в него можно будет передавать объект Error. Подробнее смотрите в документации.


Stream

Потоки в объектном режиме больше не смогут принимать на запись null.


URL

Метод url.resolve будет отбрасывать значения username и password при изменении хоста.


Windows

Отказ от поддержки WinXP и Vista.

Теперь в node.js можно будет использовать много крутых возможностей из JS 2016!


Деструктивное присваивание

Можно выбирать значения из массива или объекта прямиком в переменные:

let [a, b] = [1, 2];
let {c, e} = {c: 3, e: 4};


Деструктивные аргументы функции

Разобрать объект или массив можно и при передаче в функцию:

function fn({arg}) {
    return arg;
}

fn({arg: '1'}); // -> 1


Значения по-умолчанию

Функции получили значения по умолчанию, наконец-то можно избавиться от лишних проверок в начале тела функции:

function doSomething(task = 'nothing') {
    console.log('I\'m gonna do %s.', task);
}

doSomething(); // -> I'm gonna do nothing.


Proxy и Reflect

Объекты Proxy и Reflect доступны без флагов командной строки.


Наследование от Array

Наконец-то доступно почти полноценное наследование от объекта Array.

По-моему, очень крутой релиз получился в этот раз! Думаю, можно поздравить команду node.js.

Спасибо, Dimd13 за важное дополнение к материалу (см. 2 абзац).

© Habrahabr.ru