Сегодня состоялся одновременный релиз Node.js v10 (LTS) и NPM v6. Данное событие особенно важно, оно знаменует собой новую веху для всей платформы и превносит много значимых изменений и улучшений во всей кодовой базе Node.js. Появилась поддержка новых алгоритмов шифрования.


Node.js


Десятая версия Node.js в октябре получит долгосрочную поддержку, которая закончится в 2021 году.



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)


  1. EvilGenius18
    24.04.2018 22:04

    Отличные новости!


  1. Suvitruf
    24.04.2018 22:20

    Введены коды ошибок Error#code
    Неужели. Через столько лет? о_О

    Правда, их рекомендация для поддержки старого кода, мягко говоря, meh:


    1. justboris
      24.04.2018 22:37

      Предполагаю, что кто-нибудь напишет npm-модуль с полифиллом, если еще не.


      1. Keyten
        25.04.2018 16:58

        И в этом модуле будет много зависимостей :)


    1. justboris
      24.04.2018 22:49
      +1

      Вдогонку к предыдущему комменту: почитал вот здесь поподробнее об изменениях.


      Коды ошибок доступны уже полгода как, начиная с node 8. Поэтому, если следовать правилу "поддерживаем два последних релиза", то можно просто опираться на error.code и нет проблем.


      1. Suvitruf
        24.04.2018 22:50
        -1

        У нас четвёрка -.-


        1. justboris
          25.04.2018 00:42

          Четвертая версия перестает поддерживаться с 30 апреля. Это уже через 5 дней.


          Если после этого обнаружится очередной Heartbleed или Meltdown, то патчей для вас уже никто не выпустит.


          1. Suvitruf
            25.04.2018 00:46

            Благодарю, надо будет обновиться.


        1. Shatun
          25.04.2018 18:07
          -1

          Пфф, у нас 0.10))
          Нода используется в рамках apigee, гугл решил что в их продуктах апдейт ноды ненужен.


          1. Suvitruf
            25.04.2018 18:13

            У нас часть сервисов на ноде во внутренней сети, наружу ничего не торчит. Как-то особо не думали над её апдейтами. Единственное, с 0.x обновлял, но там много чего отвалилось. Больше не экспериментировали.


          1. justboris
            26.04.2018 02:04

            Бегите от такого сервиса подальше. Если они так пофигистично относятся к обновлениям софта, но на другие пользовательские запросы там тем более забьют.


            От того же гугла есть сервис CloudFunctions, например, там используется более-менее актуальная Node 6.


    1. Nexon
      25.04.2018 10:49

      Вот смотрю я на код, и у меня какая-то ошибка и варнинги летят.


    1. TheShock
      25.04.2018 15:15

      Что за дурацкая привычка в последнее время вставлять код картинкой?


      1. Suvitruf
        25.04.2018 15:16

        Я её из оригинала взял. Был бы текст, то, естественно, текстом бы вставил.


      1. justboris
        25.04.2018 15:20

        На medium.com (откуда оригинальный пост) нет подсветки синтаксиса. Вот авторы и выкручиваются как могут.


        1. TheShock
          26.04.2018 02:31
          -2

          Понятно теперь, откуда это пошло. Спасибо


  1. goss
    25.04.2018 00:29

    Вроде же говорилось, что в десятке появится поддержка модулей mjs без опции --experimental-modules?


    1. justboris
      25.04.2018 00:47

      Где такое говорилось?


      Судя по этому тикету, разработчики еще сами не знают, когда модули будут доступны без флага. Еще много граничных случаев отполировать надо.


      1. goss
        25.04.2018 00:50

        ESM support is slated to land, unflagged, in Node v10 around April 2018. https://blogs.windows.com/msedgedev/2017/08/10/es-modules-node-today/


        1. justboris
          25.04.2018 01:35

          Написал автору, указал на неточность. Теперь в посте написаны более размытые сроки "between October 2018 and April 2020".


          1. goss
            25.04.2018 01:45

            Ох, спасибо.


    1. ReklatsMasters
      25.04.2018 01:25

      Пока commonjs модули не подхватываются ES модулями, смысла в последних нет никакого. Никто не будет писать контент по 2 раза для разных типов модулей.


  1. dolphin4ik
    25.04.2018 08:04
    +1

    Не хватает им маркетинга. Новость вышла тихо и без пафоса. Да и название не «Node.js X» или «Node.jsx». Ой это уже другая тема…


    1. rumkin Автор
      25.04.2018 08:52

      Им тогда нужно было 9-б версию пропустить.


      1. Goodkat
        25.04.2018 13:23

        Девятая не LTS, и так пропустили ж


        1. rumkin Автор
          25.04.2018 13:30

          Вообще пропустить.


  1. ordinary_pavel
    25.04.2018 08:52

    Почему в первом абзаце написано что это LTS версия?


    1. rumkin Автор
      25.04.2018 08:54

      А она не LTS?


      1. ordinary_pavel
        25.04.2018 09:20

        проглядел я.


      1. justboris
        25.04.2018 10:09

        10 версия пока еще не LTS.


        Вот здесь об этом все подробно расписано: https://github.com/nodejs/Release


        Сейчас выпущен просто новый релиз. В него еще будут добавляться большие новые фичи, например ES-модули без флагов. Этот релиз еще не считается стабильным.


        В октябре 2018 года 10-й релиз перейдет в активный LTS. Это значит, что релиз стал стабильным, новые фичи выпускаться перестанут. Для новых фич выйдет новая, 11-я версия.


        Именно в этот момент 10-я версия станет показываться здесь в табе LTS, а пользователям будет рекомендоваться переводить все свои проекты на нее.


        1. rumkin Автор
          25.04.2018 12:53

          В контексте цикла релизов это кажется очевидным, что долгосрочная поддержка начинается, когда заканчивается обычная. Да и внутри сообщества нет решения, как называть версию готовящуюся получить LTS, но еще не получившую его.


          1. TheShock
            25.04.2018 15:16

            LTS-candidate?


  1. eyeofhell
    25.04.2018 09:07

    Они грозились ESM без флагов. Но не сделали :(


  1. LiguidCool
    25.04.2018 15:27

    Маловато как-то изменений для изменения аж с 9-ки на 10-ку…


    1. justboris
      25.04.2018 16:42

      Как и многий софт в настоящее время, Node релизится по календарю, а не по накопленному числу изменений.


  1. iShatokhin
    25.04.2018 17:08
    +1

    — V8 будет обновлен до 6.7 после релиза движка (т.е. предположительно после июня).
    — NPM 6.0 будет добавлен в Node только в 10.1


    1. Leopotam
      25.04.2018 17:17
      +1

      npm -g i npm

      обновляет npm до 6.0 версии на node v10.0.


      1. LiguidCool
        26.04.2018 12:07

        Причем работает и на 8, и на 9 ноде.