Сегодня состоялся одновременный релиз Node.js v10 (LTS) и NPM v6. Данное событие особенно важно, оно знаменует собой новую веху для всей платформы и превносит много значимых изменений и улучшений во всей кодовой базе Node.js. Появилась поддержка новых алгоритмов шифрования.
Node.js
Десятая версия Node.js в октябре получит долгосрочную поддержку, которая закончится в 2021 году.
- Официальный анонс [EN].
- Changelog [EN].
1. N-API
N-API вышел из тестирования и теперь стабилен. Для тех кто не знает N-API это прослойка между вашим кодом на C++ и внутренностями Node.js. Теперь при изменении версий ваши модули не придется переписывать. Теперь будет разработчикам, использующим нативные модули будет проще переключаться между версиями Node.js. И возможно мы увидим меньше заброшенных C++-модулей, авторы которых отказались от поддержки из-за ее сложности.
Так же теперь Node.js независим от виртуальной машины JS, так что в скором времени возможен релиз Node.js с Chakra Core под капотом.
OpenSSL 1.1.1
В этой версии включена поддержка OpenSSL 1.1.0, теперь разработчикам будут доступно шифрование с помощью ChaCha20 и авторизаци с Poly-1305. Так же OpenSSL теперь подключен через N-API, а это значит, что с выходом версии 1.1.1 в конце апреля станет доступен TLS 1.3 (новый упрощенный и ускоренный вариант TLS).
Асинхронные циклы
Как я уже писал ранее, в этой версии станут доступны асинхронные циклы и новое поведение ReadStream. Вкратце теперь можно пройтись циклом по итератору, возвращающему промисы, автоматически дожидаясь их разрешения:
for await (const chunk of fs.createReadStream(filepath)) {
// ...
}
Коды ошибок
Введены коды ошибок Error#code
, которые позволят не привязваться к тексту сообщения для определения их типа. Так что теперь обработка ошибок станет более предсказуемой.
Обновление v8 до 6.6
Версия v8 обновилась до 6.6. В которой так же много нововведений:
- Ускорение
Array#reduce
до 10-ти раз, выполнения асинхронного кода и асинхронных циклов в частности. - Появилось несколько новых методов такие как
String#trimStart
,String#trimEnd
. - Condition-free блок try-catch:
try { doSomethingWrongWay(); } catch { // Попался!.. }
- Улучшение кеширования и загрузки кода, построение AST в параллельном потоке.
- Отказ от gyp.
Подробнее в блоге v8.
Экспериментальная поддержка промисов модулем fs
Промисы добавлены в модуль fs
. Пока экспериментально в свойство promises
.
Прочие улучшения
Улучшены поддержка функционала для замера производительности. И многое другое.
NPM
Официальный анонс [EN].
Security Platfrom
В шестой версии NPM озаботились безопасностью модулей. Появилась поддержка предупреждений об уязвимостях при установке пакетов, а так же новый метод npm:
npm audit
NPM будет автоматически проходиться по базе известных уязвимостей и будет предупреждать, если среди зависимостей встретится уязвимый модуль.
Производительность
Менеджер пакетов может выдать в 17 раз более высокую скорость по сравнению с предыдущей версией. А так же и без того ускоренный npm ci
стал работать в 2-3 раза быстрее.
Управление вебхуками
Два года назад NPM ввела поддержку webhooks для получения уведомлений об изменении определенного пакета. Ранее для управления использовался сторонний модуль wombat, теперь поддержка вебхуков стала встроенной.
Другие
Появилось автоматическое разрешение конфликтов в lock-файлах. Так же теперь выводится больше данных для определения целостности пакетов.
Установка
Node.js можно скачать с официального сайта (поставляется с npm 5.6).
Установить NPM:
npm i -g npm@6
Комментарии (38)
Suvitruf
24.04.2018 22:20Введены коды ошибок Error#code
Неужели. Через столько лет? о_О
Правда, их рекомендация для поддержки старого кода, мягко говоря, meh:
justboris
24.04.2018 22:49+1Вдогонку к предыдущему комменту: почитал вот здесь поподробнее об изменениях.
Коды ошибок доступны уже полгода как, начиная с node 8. Поэтому, если следовать правилу "поддерживаем два последних релиза", то можно просто опираться на error.code и нет проблем.
Suvitruf
24.04.2018 22:50-1У нас четвёрка -.-
justboris
25.04.2018 00:42Четвертая версия перестает поддерживаться с 30 апреля. Это уже через 5 дней.
Если после этого обнаружится очередной Heartbleed или Meltdown, то патчей для вас уже никто не выпустит.
Shatun
25.04.2018 18:07-1Пфф, у нас 0.10))
Нода используется в рамках apigee, гугл решил что в их продуктах апдейт ноды ненужен.Suvitruf
25.04.2018 18:13У нас часть сервисов на ноде во внутренней сети, наружу ничего не торчит. Как-то особо не думали над её апдейтами. Единственное, с 0.x обновлял, но там много чего отвалилось. Больше не экспериментировали.
justboris
26.04.2018 02:04Бегите от такого сервиса подальше. Если они так пофигистично относятся к обновлениям софта, но на другие пользовательские запросы там тем более забьют.
От того же гугла есть сервис CloudFunctions, например, там используется более-менее актуальная Node 6.
goss
25.04.2018 00:29Вроде же говорилось, что в десятке появится поддержка модулей mjs без опции --experimental-modules?
justboris
25.04.2018 00:47Где такое говорилось?
Судя по этому тикету, разработчики еще сами не знают, когда модули будут доступны без флага. Еще много граничных случаев отполировать надо.
goss
25.04.2018 00:50ESM support is slated to land, unflagged, in Node v10 around April 2018. https://blogs.windows.com/msedgedev/2017/08/10/es-modules-node-today/
ReklatsMasters
25.04.2018 01:25Пока commonjs модули не подхватываются ES модулями, смысла в последних нет никакого. Никто не будет писать контент по 2 раза для разных типов модулей.
dolphin4ik
25.04.2018 08:04+1Не хватает им маркетинга. Новость вышла тихо и без пафоса. Да и название не «Node.js X» или «Node.jsx». Ой это уже другая тема…
ordinary_pavel
25.04.2018 08:52Почему в первом абзаце написано что это LTS версия?
rumkin Автор
25.04.2018 08:54А она не LTS?
justboris
25.04.2018 10:0910 версия пока еще не LTS.
Вот здесь об этом все подробно расписано: https://github.com/nodejs/Release
Сейчас выпущен просто новый релиз. В него еще будут добавляться большие новые фичи, например ES-модули без флагов. Этот релиз еще не считается стабильным.
В октябре 2018 года 10-й релиз перейдет в активный LTS. Это значит, что релиз стал стабильным, новые фичи выпускаться перестанут. Для новых фич выйдет новая, 11-я версия.
Именно в этот момент 10-я версия станет показываться здесь в табе LTS, а пользователям будет рекомендоваться переводить все свои проекты на нее.
LiguidCool
25.04.2018 15:27Маловато как-то изменений для изменения аж с 9-ки на 10-ку…
justboris
25.04.2018 16:42Как и многий софт в настоящее время, Node релизится по календарю, а не по накопленному числу изменений.
iShatokhin
25.04.2018 17:08+1— V8 будет обновлен до 6.7 после релиза движка (т.е. предположительно после июня).
— NPM 6.0 будет добавлен в Node только в 10.1
EvilGenius18
Отличные новости!