Вышел в свет 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 абзац).