Pull to refresh

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

Reading time2 min
Views23K

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


Изменена логика работы Buffer для повышения безопасности приложений. Из коробки будут доступны Proxy, Reflect, расширеная поддержка ES 2015. Основные изменения c примерами под катом.


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


Изменения 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.


Изменения v8


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


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


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


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.


P.S.


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


P.P.S.


Спасибо, Dimd13 и ChALkeRx за важное дополнение по поддержке версий.

Tags:
Hubs:
+27
Comments21

Articles