Стабильный релиз Node v5
На прошлой неделе состоялся релиз 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.