Все, что вам нужно знать о новом Node.js 8

Jan 22, 2026
Инструкции

Последний главный выпуск Node.js приносит множество значительных улучшений для сообщества JavaScript, включая обновленный JavaScript Engine, NPM версии 5, V8 Google V8, Node.js API, Async_Hooks, Antwg Url Parser, более безопасные буферы и многое другое. Здесь мы будем обновлять вас на этих функциях и других наиболее важных аспектах этого выпуска.

Node.js 8 выпускается под названием кода Углерод и доступно сейчас из Node.js сайт Отказ Он будет активно работал еще на 18 месяцев (нет новых функций, исправления ошибок, улучшения безопасности и обновлениях NPM), прежде чем перейти в режим обслуживания. Как и в случае с предыдущими релизами, во время релизов в режиме обслуживания получат только критические обновления безопасности и исправления ошибок.

  • 20 инструментов JavaScript, чтобы взорвать свой разум

Безопасно сказать, что, поскольку Node.js был рядом, это одно из самых больших обновлений, которые когда-либо получали время выполнения - это меняется, как нативные надстройки написаны, а также обеспечивают дополнительные улучшения безопасности и производительности.

RisingStack. помогают компаниям добиться успеха с Node.js в течение четырех лет с обучением, консультированием или развитием. Одна из самых больших борьбу, которые мы имели добавления собственных зависимостей проектам.

Перед Node.js 8, если приложения были зависеть от модулей с нативным кодом, когда прибыли основные новые версии Node.js, в качестве сопровождающего приложения вам пришлось перекомпилировать ваши зависимости. Если вам повезло, они работали сначала.

Этот процесс стал возможным возможным с помощью огромных рабочих модулей, которые создают свои модули работы в несовместимых версиях Node.js, в основном с помощью модуля, называемого NAN (Node.js Noadious Abstractions).

Этот процесс далеко от идеала, поскольку многие компании не смогли обновить свои зависимости, если они не могут быть скомпилированы, и он также поставил огромную дополнительную рабочую нагрузку на сопровождающие модуля. Чтобы решить эту проблему, был введен api ade.js (или n-API).

01. Введите API Node.js

Machine agnostic: Native modules now work with Microsoft’s Chakra as well as different Node.js versions

Машина Agnostic: родные модули теперь работают с Chakra Microsoft, а также разные версии Node.js

API Node.js является одним из наиболее значительных улучшений Node.js 8. Он приносит четко определенную ABI (бинарный интерфейс приложения) в Node.js, чтобы сделать его виртуальную машину агностикой. Это означает, что родные модули будут работать не только с различными версиями Node.js, используя Google V8 JavaScript Engine, но и с чакра Microsoft.

На данный момент N-API находится в экспериментальном состоянии, что означает, что значительные изменения могут случиться как с реализацией, так и для API. С этим сказанным, нативные модульные сопровождающие рекомендуется попробовать новый интерфейс и дать обратную связь.

Если вы являетесь сопровождением модуля, вы можете отпустить версию вашего модуля N-API параллельно с вашим основным модулем версией. Для этого официальная рекомендация - опубликовать версию вашего модуля с тегом NPI NPM NPM.

Чтобы опубликовать версию N-API, вам нужно:

  1. Опубликуйте версию без N-API как обычно.
  2. Опубликовать версию N-API:
  • Обновите версию в файле Package.json, добавив тире и Tag Tag - так что если у вас было 1.0.0 ранее, он становится 1.0,0-NAPI
  • Публиковать в НПМ, используя NPM Publish --tag n-api

Таким образом, вы убедитесь, что версия N-API не станет последним выпуском, поэтому, если кто-то устанавливает ваш модуль, по умолчанию они получают версию Non-API.

Пряжа, менеджер пакетов, созданный инженерами Facebook, был выпущен в октябре 2016 года. Он пытался решить некоторые недостатки официального клиента NPM, в основном, став более качественным и детерминированным. Большинство из этих инноваций также представлены в НПМ 5.

02. Здравствуйте до НПМ 5

Также как пряжа, NPM 5 представила механизм блокировки файла - всякий раз, когда вы устанавливаете новую зависимость в свой проект, он будет добавлен автоматически не только к Package.json. , но новый файл называется Package-lock.json. также.

Вы можете спросить, какая разница между Package-lock.json. и NPM-Shrinkwrap.json. Как NPM-Shrinkwrap был в NPM с навсегда? Короче говоря, они по сути такие же, но Package-lock.json. автоматически создается.

Их цель состоит в том, чтобы точно описать, какое данное дерево зависимости NPM должно создать для вашей пакеты. Если у вас есть оба, NPM-Shrinkwrap будет иметь приоритет. Основываясь на рекомендации NPM, вы должны использовать NPM-Shrinkwrap.json. Если вы хотите опубликовать его, так что ваши потребители модуля тоже будут использовать его. С другой стороны, вы должны использовать Package-lock.json внутри - даже проверено в репозитории.

Но улучшения NPM 5 не остановились с добавлением файла блокировки - с новой версией, все модули, которые вы устанавливаете, автоматически сохраняются, и они будут добавлены как к вашему Package.json. и Package-lock.json. файл.

Способ работы Scripts NPM также немного изменился. Прежде всего, предустановленные скрипты теперь выполняются до всего остального, поэтому они могут изменить каталог Node_Modules до того, как CLI на самом деле его прочитает. Кроме того, были добавлены два новых скрипта - подготовить и почеркать. Они оба бегают на пакете NPM, так и NPM публикуют, но не на NPM установите.

В основе Node.js - это JavaScript Engine, который интерпретирует ваш код JavaScript, создает Bytecode от него и дает вам приложение. С новым выпуском Node.js 8 также был обновлен.

03. Обновлен JavaScript Engine

Big news: Node.js will be able to update the V8 engine without a major release

Big News: Node.js сможет обновить двигатель V8 без основного выпуска

При обновленном двигателе V8 введены основные улучшения производительности - но, что более важно, гарантировано, что она гарантированно будет иметь форвардный совместимый приложение двоичный интерфейс. Это означает, что Node.js сможет обновить двигатель V8 без основного выпуска Node.js.

Это имеет решающее значение, поскольку новые версии двигателя V8 введут новый конвейер компилятора, который введет дополнительные улучшения производительности в Node.js. Это обновление было настолько важно, чтобы это была причина, по которой исходное Node.js 8 дата выпуска была отложена.

Текущий трубопровод слишком сложный, а введение новых языковых функций обычно означает прикосновение к нескольким частям трубопровода. С новым трубопроводом он станет намного проще.

Зажигание, новый интерпретатор и Turbofan, новый компилятор оптимизации, был в разработке почти три с половиной года. Это фундамент, на котором будут созданы новые языковые функции. Они включают опыт, который команда V8 в Google собрала от измерения реальных приложений JavaScript.

04. Добро пожаловать Async Hooks

Чтобы лучше понять, какие async Hooks есть, давайте сделаем шаг назад и сначала перехватываемся с продолжением локальным хранилищем. Они работают как текут-локальное хранилище в резьбовых программировании, но в Node.js он использует обратные вызовы для передачи контекста.

Представьте, что вы пишете приложение, которое выбирает продукт из базы данных, то позже вы хотите отправить его в свой ответ HTML:

 Const CreateNamespace = требуется («продолжение местного хранения»). CreateNamespace
Const Session = CreateNamespace («My-App-Session»)
const db = требует ('./ db.js')
Функция Onrequest (варианты, следующие) {
  db.fetchuserbyId (опции .id, функция (ошибка, пользователь) {
    Если (ошибка) {
      Вернуть следующий (ошибка)
    }
    Session.Set («пользователь», пользователь)
    следующий()
  }) 

Позже, если вы хотите получить доступ к объекту пользователя, все, что вам нужно сделать, это захватить его из локального хранилища:

 const getmasepace = требует («продолжение местного хранения»). Getnamepace
Const Session = GetnameSpace («Моя сессия»)
Const Render = требует ('./ Render.js')
Функциональная отделка (ответ) {
  const user = session.get («Пользователь»)
  Render ({user: user}). Труба (ответ)
} 

Эта техника широко используется поставщиками мониторинга производительности приложений, таких как след RisingStack, чтобы сохранить контекст выполнения и собирать информацию о мониторинге из производственных систем.

С помощью крюков Async подобная функция перемещается в Core Node.js - это помогает отслеживать асинхронные запросы и обработчики через их жизненный цикл. То async_hooks. Модуль предоставляет API для регистрации обратных вызовов, отслеживающих срок службы асинхронных ресурсов, созданных внутри приложения Node.js.

05. Улучшена поддержка обещания

Перед Node.js 8, если вы хотите использовать основные модули в приложении, которое использует обещания, вам пришлось вручную обернуть основные модули, чтобы их можно было использовать так же. Это выглядело что-то подобное:

const fs = требует ('fs')
Функция ReadfilePromise (... args) {
  вернуть новое обещание ((разрешение, отклонение) = & gt; {
    Fs.readfile (... args, (ERR, результат) = & gt; {
      Если (err) {
        Возврат разрешения (ERR)
      }
      разрешать (результат)
    })
  })
}
ReadfilePromise ('./ package.json', 'utf-8')
  .then ((res) = & gt; console.log (res))
  .catch (((err) = & gt; console.log (err)) 

С Node.js 8 добавляется новый помощник метод вспомогательного модуля UTIL, UTIL.Promisify. Это позволяет включать стандартные API в стиле Callback Node.js в функцию, которая возвращает обещания.

Используя эту функцию, приведенный выше фрагмент упрощен и становится этим:

 const fs = требует ('fs')
const promisify = требуется ('ultil'). Опрятное
ReadfilePremise = promisify (fs.readfile)
ReadfilePromise ('./ package.json', 'utf-8')
  .then ((res) = & gt; console.log (res))
  .catch (((err) = & gt; console.log (err)) 

06. Более безопасные буферы

Перед Node.js версии 8, буферы, выделенные с использованием нового конструктора буфера (номера), не инициализируют пространство памяти с Zeros. В результате новые экземпляры буферов могут содержать конфиденциальную информацию, что приведет к серьезным проблемам безопасности - даже популярные модули, такие как Mongoose, WS или модуль запроса.

Но как мы туда добрались? Когда JavaScript был перемещен из браузера на стороне сервера, возникла необходимость в быстрой и легкой обработке данных - поэтому был добавлен класс буфера. Буфер - это смежный массив двоичных данных. При использовании с конструктором, который просит размер нового буфера, он только что зарезервировал пространство памяти, но не чистил его.

Поскольку ваш сервер может одновременно служить нескольким пользователям (в отличие от вашего браузера), возможно, что свежего выделенного пространства памяти содержит конфиденциальную информацию от других пользователей (даже паролей!), И потенциально может быть подвергнут воздействию злоумышленника.

Хотя было намеренное решение для повышения эффективности создания нового буфера для большинства из нас, это было не предполагаемое использование - даже если он был задокументирован. Из-за этого, начиная с Node.js 8, буферы, выделенные с использованием нового буфера (номер) или буфера (номер), будут автоматически заполнены Zeros.

07. Изменения в отладке

Перед Node.js 8, если вы хотите отладить свои приложения Node.js, одно из самых простых решений было запустить встроенный отладчик, используя отладку узла index.js. С Node.js 8 это удаляется и заменяется узлом-инспектором. Вы все еще можете использовать отладчик CLI, но он будет удален в ближайшее время.

Отныне вы должны использовать узел Iinspect index.js. или узел Iinspect-brk index.js Если вы хотите отладчик поставить точку останова на первую строку приложения. После того, как вы запускаете его, вы получите ссылку WebSocket, что Google Chrome может использовать для подключения его отладчика.

Вы должны отправиться в Chrome: // проверять В вашем браузере Chrome, и он автоматически распознает приложение запущено Node.js, что позволяет вам подключиться. После того, как вы подключились к вашему процессу, вы получите отладчик Chrome для проверки вашего запущенного приложения Node.js.

08. Внедрение статических кодов ошибок

Ранее, если вы хотите проверить ошибку, которую вы получили во время выполнения и действуете соответствующим образом, в большинстве случаев вам пришлось проверить сообщение об ошибке. Это было ошибкой, поскольку сообщения об ошибках могут измениться с новыми версиями Node.js.

С Node.js 8, статические коды ошибок были назначены большинству ошибок - оно все еще работает, но после того, как он закончен, эти коды ошибок не изменится, даже если сообщение по ошибке Отказ

Например, вновь введен Whatwg URL API Буду бросать Err_invalid_url. Ошибка в следующем фрагменте, так как параметр не является действительным URL:

 Const URL = требуется («URL»). URL
const myurl = новый URL ('/ foo') 

Как видите, выпуск обновления Node.js 8 принес много новых и захватывающих улучшений для сообщества JavaScript. Чтобы начать экспериментировать со всеми этими новыми функциями самостоятельно, отправиться на nodejs.org. Загрузите Node.js 8 двоичных и начните играть с новым набором набора!

Эта статья изначально появилась в Чистый журнал Выпуск 296. Купить это здесь Отказ

Статьи по Теме:

  • 20 модулей Node.js вам нужно знать
  • 30 расширений Chrome для веб-дизайнеров и разработок
  • 3 лучших способа построить прототип сайта

Инструкции - Самые популярные статьи

Chiaroscuro Art: пошаговое руководство

Инструкции Jan 22, 2026

Изготовление Chiaroscuro Art - это все об использовании композиции света и тени для создания глубины и, что боле..


7 Top Tips для запуска собственного бизнеса

Инструкции Jan 22, 2026

Если вы чувствуете себя застрявшим в творческой колею, это может стоит..


Разбросание деревьев с V-Ray

Инструкции Jan 22, 2026

Добавление деталей вашей сцене - это всегда способ идти, когда вы хотит..


Держите идеальный контроль версий с абстрактным

Инструкции Jan 22, 2026

Управление версиями изначально была направлена ​​на разработчики, р�..


Мода гибкие макеты с CSS Grid

Инструкции Jan 22, 2026

CSS Grid идеально подходит для создания двухосевых макетов рядов и колонн..


Модель инопланетного пиратского существа в Zbrush

Инструкции Jan 22, 2026

Чтобы помочь вам научиться создавать 3D-пришельца пиратского персонаж�..


Как выбрать правильный инструмент прототипирования

Инструкции Jan 22, 2026

Прототипирование Возможно, одна из самых важных частей процесс�..


Как назвать агентство вашего веб-дизайна

Инструкции Jan 22, 2026

Получение правильного имени для вашего агентства не легко; Многие люд�..


Категории