Node.js 18 принесла несколько важных обновлений языка:
Top-level await:
// Теперь можно использовать await на верхнем уровне модулей
const data = await fetchData();
console.log(data);
Классовые поля и приватные методы:
class User {
#privateField = 'secret'; // Приватное поле
publicMethod() {
return this.#privateValue;
}
}
Новый модуль node:test
для юнит-тестирования:
import test from 'node:test';
import assert from 'node:assert';
test('async test', async (t) => {
const value = await asyncFunction();
assert.equal(value, expected);
});
Поддержка стандартных потоков из веб-стандартов:
const { ReadableStream } = require('node:stream/web');
const stream = new ReadableStream({
start(controller) {
controller.enqueue('Hello');
controller.close();
}
});
Новые возможности языка:
Метод findLast() для массивов:
const arr = [1, 2, 3, 4];
console.log(arr.findLast(x => x % 2 === 0)); // 4
Hashbang поддержка: Теперь можно явно указывать Node.js в shebang:
#!/usr/bin/env node
console.log('Hello from executable script!');
Более стабильная реализация ECMAScript Modules:
// package.json
{
"type": "module"
}
Поддержка синхронного импорта JSON:
import config from './config.json' assert { type: 'json' };
Быстрый запуск приложений:
Promise-based API в fs/promises:
import { readFile } from 'node:fs/promises';
const content = await readFile('file.txt', 'utf-8');
Более простая передача сообщений:
const { Worker } = require('node:worker_threads');
const worker = new Worker('./worker.js');
worker.postMessage({ hello: 'world' });
// server.mjs
import { createServer } from 'node:http';
const server = createServer();
const port = await getConfiguredPort(); // Top-level await
server.listen(port);
class Database {
#connection;
constructor() {
this.#connection = connectToDB();
}
#validateQuery(query) {
// Приватный метод
}
}
const arr = [1, 2, 3, 2, 1];
console.log(arr.findLastIndex(x => x === 2)); // 3
Некоторые API были помечены как deprecated:
require('crypto').createDecipher
require('string_decoder')
Node.js 18 и 20 принесли значительные обновления JavaScript, включая поддержку современных ECMAScript возможностей, улучшенную модульную систему, новый Test Runner и Web Streams API. Эти версии делают Node.js более современной и производительной платформой, сохраняя при этом стабильность и обратную совместимость. Для максимальной эффективности рекомендуется постепенно внедрять новые возможности в существующие проекты.