Node.js

Środowisko uruchomieniowe pozwalające wykonywać JavaScript poza przeglądarką, m.in. na serwerze. Oparte na silniku V8 Google’a.

Node.js to środowisko uruchomieniowe (runtime), które pozwala wykonywać kod JavaScript poza przeglądarką — najczęściej na serwerze, ale też w narzędziach wiersza poleceń czy skryptach na Twoim laptopie. Pod maską siedzi silnik V8 od Google’a (ten sam, który napędza Chrome), a wokół niego biblioteka libuv odpowiedzialna za obsługę operacji wejścia/wyjścia. Projekt stworzył Ryan Dahl w 2009 roku i od tego czasu JavaScript przestał być wyłącznie „językiem od animacji na stronach”.

Najważniejszy pomysł Node.js to model jednowątkowy z pętlą zdarzeń (event loop) i nieblokującym I/O. Zamiast czekać na zakończenie czytania pliku albo odpowiedzi z bazy danych, Node odkłada taką operację „na bok” i zajmuje się kolejnymi zadaniami, a wynik obsługuje, gdy będzie gotowy. Dzięki temu jeden proces potrafi obsłużyć tysiące równoległych połączeń bez tworzenia osobnego wątku dla każdego klienta. To czyni Node świetnym do API, serwerów WWW, czatów real-time i mikroserwisów — czyli wszędzie tam, gdzie dużo się czeka na sieć i dysk.

Jak wygląda to w praktyce

Razem z Node.js dostajesz npm — menedżer pakietów z gigantycznym repozytorium gotowych bibliotek. Typowy start projektu wygląda tak:

  • node app.js — uruchamia Twój skrypt,
  • npm init -y — tworzy plik package.json z konfiguracją projektu,
  • npm install express — dociąga popularny framework do budowy serwerów HTTP.

W kilku linijkach postawisz działający serwer: importujesz Express, definiujesz endpoint (np. app.get('/', ...)) i wołasz app.listen(3000). Wpisujesz localhost:3000 w przeglądarce i masz własne API. Na tym samym Node działają też narzędzia, których używasz na co dzień jako frontendowiec — webpack, Vite czy ESLint to programy napisane w JavaScript i odpalane właśnie przez Node.

Na co uważać

Najczęstszy mit to „Node jest wolny, bo jednowątkowy”. Owszem, do operacji I/O jest szybki, ale ciężkie obliczenia (np. przetwarzanie obrazu, kryptografia w pętli) zablokują pętlę zdarzeń i zatrzymają cały serwer. Od takich zadań masz Worker Threads albo osobny proces. Druga pułapka to mylenie Node.js z samym JavaScriptem — w przeglądarce masz obiekt window i document, w Node ich nie ma, za to dostajesz dostęp do plików (fs), systemu i sieci. I jeszcze klasyk: nie commituj katalogu node_modules do repozytorium — od tego jest package.json i package-lock.json.

Pojęcia powiązane: V8, npm, Express, event loop, JavaScript, libuv, asynchroniczność (async/await), Deno i Bun (nowsze, alternatywne runtime’y), backend.