Menu

Node.js a JavaScript: czym się różnią?

JavaScript to język; Node.js to program, który uruchamia go poza przeglądarką. Składnia jest identyczna, ale obiekty globalne i wbudowane API wokół twojego kodu są inne.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

JavaScript to język programowania; Node.js to środowisko uruchomieniowe, czyli program, który wykonuje JavaScript poza przeglądarką. Składnia, typy i standardowe obiekty (Array, Promise, JSON) są w obu takie same. Zmienia się otoczenie twojego kodu: przeglądarka daje ci window i document do pracy ze stroną, a Node.js daje global, process, require i moduły takie jak fs do pracy z plikami, serwerami i systemem operacyjnym.

Globalne obiekty przeglądarki wypisały undefined, te z Node.js object albo function, a ostatnia linia true, bo w Node.js globalThis i global to ten sam obiekt. Wklej sześć pierwszych linii do konsoli przeglądarki, a wyniki się odwrócą.

Różnica w jednej tabeli

JavaScript w przeglądarceJavaScript w Node.js
Czym jestJęzyk wykonywany przez silnik przeglądarkiTen sam język wykonywany przez środowisko Node.js (V8)
Obiekt globalnywindowglobal
Na czym pracujeNa stronie: document, DOM, zdarzeniaNa maszynie: fs, http, process, os
Moduły<script type="module">, importrequire (CommonJS) i import (moduły ES)
PakietyWbudowane w stronę przez bundlerInstalowane przez npm do node_modules
WejścieKliknięcia, formularze, zdarzenia klawiaturyArgumenty wiersza poleceń, standardowe wejście, żądania HTTP
Array, Promise, JSON, setTimeout, consoleTakTak

Najwięcej zamieszania robi wiersz o modułach. Node.js obsługuje oba systemy, require i import, a przeglądarki rozumieją tylko import. Strona CommonJS vs moduły ES wyjaśnia, który wybrać.

Język jest ten sam

Funkcja, która używa tylko języka, działa wszędzie. Ten blok nie ma w sobie nic specyficznego dla Node i w przeglądarce wypisałby te same linie:

Wypisało {"best":95,"average":85} i Passed: 2 of 3. Składnia spread, reduce, template stringi i JSON należą do języka, zdefiniowanego przez standard ECMAScript, więc ma je każde środowisko.

Co ma tylko Node.js

Część specyficzna dla Node to zestaw wbudowanych modułów i obiektów globalnych, które rozmawiają z systemem operacyjnym:

Zapisało plik, odczytało go z powrotem i wypisało .txt 2 lines, a potem pustą listę argumentów. Ani dostęp do plików, ani process.argv nie istnieją w przeglądarce, gdzie strona nie może dotknąć twojego dysku.

Jakie funkcje języka dostajesz

Język ma wersje (ES2015, ES2020, ES2024 i tak dalej), a każdy silnik dodaje nowe funkcje we własnym tempie. Node.js w każdym wydaniu zawiera konkretny silnik V8, więc to twoja wersja Node.js decyduje, które funkcje działają: na przykład Object.groupBy i Array.prototype.findLast wymagają nowej wersji. Tabela kompatybilności przeglądarek pokazuje więc Node.js jako kolejną kolumnę obok Chrome, Firefox i Safari. Uruchom node --version, gdy nowsza składnia kończy się SyntaxError albo metoda jest undefined, i zaktualizuj Node, zanim sięgniesz po polyfill.

Kod, który działa w obu

Autorzy bibliotek czasem sprawdzają, gdzie działa ich kod, zanim użyją API specyficznego dla środowiska:

const isNode = typeof process !== 'undefined' && process.versions?.node != null;
const isBrowser = typeof window !== 'undefined';

Jeśli możesz, sprawdzaj funkcję, której potrzebujesz, a nie nazwę środowiska: typeof fetch === 'function' mówi więcej niż "czy to Node". Oba mają dziś fetch, URL, TextEncoder, setTimeout i structuredClone, więc mniej kodu wymaga sprawdzania niż kilka lat temu.

Częste błędy

Używanie document albo window w skrypcie Node.js. Dostaniesz ReferenceError: document is not defined. Ten kod należy do przeglądarki.

Używanie require w przeglądarce. Przeglądarki go nie mają. Użyj import albo bundlera, który zamieni wywołania require w jeden plik.

Myślenie, że Node.js to inny język. To nie jest inny język. Jeśli tutorial JavaScript czegoś uczy, działa to w Node.js, chyba że używa DOM.

Najczęściej zadawane pytania

Czy mogę nauczyć się Node.js bez nauki JavaScript?

Nie bardzo. Każda linia, którą piszesz w Node.js, to JavaScript, więc język jest pierwszy. Gdy znasz funkcje, obiekty i promise, Node.js to zestaw dodatkowych API do nauczenia.

Dlaczego w Node.js dostaję "document is not defined"?

document to DOM przeglądarki, a Node.js nie ma strony, która by ci go dała. Kod, który dotyka document albo window, musi działać w przeglądarce albo w środowisku testowym, które udaje DOM, np. jsdom.

Czy TypeScript to to samo co Node.js?

Nie. TypeScript to typowana wersja JavaScript, która kompiluje się do JavaScript. Wynik uruchomisz w Node.js albo w przeglądarce, a nowe wersje Node.js potrafią też uruchamiać wiele plików .ts bezpośrednio, usuwając typy.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

Zacznij