С недавним выпуском Node.js 8.5 в ядро ​​Node.js появились три очень интересных новых функции. В коротком блоге вы узнаете о них!

Модули ECMAScript в Node.js!

Одной из наиболее востребованных функций Node.js была поддержка ESM. Это означает, что теперь вы можете использовать ключевое слово import без транспиляции кода. Итак, с этого момента вы можете запускать такие фрагменты:

import fs from 'fs'

Единственные две вещи, на которые вы должны обратить внимание, - это дать вашему файлу имя с расширением mjs и запустить Node.js с флагом --experimental-modules.

На данный момент использование ESM в Node.js имеет некоторые ограничения:

  • import(), ожидается более новый выпуск V8, используемый в Node.js,
  • import.meta, ожидая, пока V8 его реализует,
  • require('./foo.mjs'), не поддерживается.

Вы можете проверить соответствующий запрос на перенос здесь: https://github.com/nodejs/node/pull/14369/files. Спасибо за прекрасную работу Брэдли Фариасу, Гаю Бедфорду и Яну Кремсу!

Крючки производительности

Первоначальная реализация Performance Timing API также входит в Node.js 8.5.

Реализованы API-интерфейсы User Timing mark() и measure(), а также специфический для Node.js вариант Frame Timing для измерения длительности цикла событий.

Вы можете начать использовать его с Node.js 8.5 следующим образом:

const { performance } = require('perf_hooks')  
performance.mark('A')  
setTimeout(() => {  
  performance.mark('B')
  performance.measure('A to B', 'A', 'B')
  const entry = performance.getEntriesByName('A to B', 'measure')
  console.log(entry.duration)
}, 10000)

Чтобы узнать больше, ознакомьтесь с официальной документацией здесь: https://nodejs.org/api/perf_hooks.html.

Вы можете проверить соответствующий запрос на перенос здесь: https://github.com/nodejs/node/pull/14680/files. Спасибо за прекрасную работу Джеймсу М. Снеллу!

Копирование файла с помощью модуля core fs

В Node.js 8.5 также добавлена ​​новая функция файловой системы - теперь вы можете копировать файлы с помощью модуля core fs!

const fs = require('fs')
fs.copyFile('source.txt', 'destination.txt', (err) => {  
  if (err) {
    // handle error properly, not just console.log
    return console.error(err)
  }
  console.log('source.txt was copied to destination.txt')
})

Вы можете проверить соответствующий запрос на перенос здесь: https://github.com/nodejs/node/pull/15034/files. Спасибо за прекрасную работу Колину Иригу!

Мы надеемся, что с помощью этих замечательных новых функций вы сможете создавать еще больше отличных библиотек и приложений с помощью Node.js! У вас уже есть библиотека, которая зависит от этих функций? Дайте нам знать об этом в комментариях!

Вы можете ознакомиться со всеми исправлениями и функциями, внесенными в Node.js 8.5, здесь: https://nodejs.org/en/blog/release/v8.5.0/.

Первоначально опубликовано на blog.risingstack.com 13 сентября 2017 г.