Backend elméleti alapok · 3. tananyag
Az iskolai gépeken a Node.js már telepítve van — otthon viszont neked kell feltenned, ha dolgozni akarsz a feladatokon. Ez a fejezet ehhez ad receptet Windowsra, macOS-re és Linuxra egyaránt, majd megmutatja azt a néhány parancsot, amit ezután minden nap használni fogsz.
major.minor.patch );npm init-tel, és értelmezni a
package.json -t;package-lock.json
és a node_modules;node --watch
automatikus újraindítást;Egyetlen telepítő három dolgot tesz a gépedre. Sokan azt hiszik, hogy az npm-et külön kell feltenni — nem kell, a Node.js hozza magával.
node -v, npm -v, npx -v.A Node.js 24.20.0 verzióhoz az npm 11.19.0 tartozik. Ha valahol azt olvasod, hogy „telepítsd az npm-et”, az szinte biztosan elavult útmutató.
A Node.js verziószáma három részből áll: major. —
például 24.20.0. Ez a semver (semantic versioning) rendszer,
és nemcsak a Node, hanem minden npm-csomag ezt használja.
| Rész | Mikor nő? | Jelentése |
|---|---|---|
| major (24) | Törő változásnál | A régi kód elromolhat |
| minor (20) | Új funkciónál | Visszafelé kompatibilis |
| patch (0) | Hibajavításnál | Csak javítás |
Ha régebbi Node van a gépeden (például 18 vagy 20), a tananyag példái nagyrészt működni fognak, de néhány kényelmi funkció hiányozhat, és a Prisma 7 is újabb Node-ot igényel. Frissíts 24 LTS-re.
^?Ez a jelölés a package.-ban bukkan majd fel, a 8. szakaszban. Érdemes már
most megérteni, mert ez dönti el, hogy egy npm install milyen verziót hozhat le:
^ a főverzión belül enged frissíteni; a főverzió-váltás mindig kézi döntés.Válaszd ki a saját operációs rendszeredet — csak azt kell elolvasnod. Ha az iskolai gépen dolgozol, ez a szakasz kimaradhat: ott a környezet már készen áll, ugorj a 4. szakaszra.
https://nodejs.org Ha a node parancsra azt kapod, hogy „a 'node' nem ismerhető fel belső
vagy külső parancsként”, akkor vagy nem indítottad újra a terminált, vagy a telepítés nem tette a
PATH-ba. Első lépés: zárd be az összes terminálablakot és
a VS Code-ot, majd nyisd meg újra.
A winget a Windows beépített csomagkezelője. Kényelmes, de nem minden Windowson létezik — ezért előbb ellenőrizd:
winget --version
Ha verziószámot kapsz (például v1.9.25200), használhatod:
winget install OpenJS.NodeJS.LTS
Ezután zárd be és nyisd meg újra a terminált.
Ha ezt a hibát kapod, nem rontottál el semmit: ezen a gépen egyszerűen nincs telepítve a winget. Ez teljesen normális az alábbi esetekben:
Mit tegyél? Semmi különöset: használd az A) pontban leírt hivatalos
telepítőt. A winget csak kényelmi eszköz — ugyanazt a Node.js-t telepíti, mint az
. fájl, és a tananyag további részéhez semmilyen szükség nincs rá.
Először nézd meg, egyáltalán telepítve van-e a mögötte álló csomag (App Installer):
Get-AppxPackage -Name Microsoft.DesktopAppInstaller
Ha üres a válasz, a csomag hiányzik. Két út van:
microsoft/winget-cli) letöltött
.msixbundle fájlból, az Add-AppxPackage
paranccsal. Ehhez azonban több függőséget is fel kell tenni (VCLibs, UI.Xaml), és jellemzően
rendszergazdai jog kell hozzá.Iskolai gépen ne kezdj bele — nem is lesz hozzá jogod. Ez a tananyag egyetlen ponton sem igényli a wingetet: a hivatalos telepítő mindent elintéz.
Akkor hasznos, ha több projekten dolgozol, amelyek eltérő Node-verziót igényelnek.
winget install Schniz.fnm
Ezután a PowerShell profiljába be kell tenni az fnm indítósorát (a fnm env
kiírja, hogyan). Használat:
fnm install 24 # a 24-es LTS telepítése fnm use 24 # váltás a 24-esre fnm list # telepített verziók fnm default 24 # alapértelmezett verzió
Az nvm-windows is elterjedt megoldás ugyanerre. Bármelyiket használod: ne telepítsd egyszerre a hivatalos telepítővel is, mert összeakadhatnak. Ha váltasz, előbb távolítsd el a másikat.
https://nodejs.org .pkg fájl letöltése.brew install node@24
brew install fnm
Majd a ~/. fájlba:
eval "$(fnm env --use-on-cd)"
Ezután:
fnm install 24 fnm default 24
Az M-sorozatú gépekre az ARM64 változat való; a nodejs.org automatikusan ezt kínálja
fel. Ha a node -p "process. parancsra
arm64 a válasz, jól jársz.
Az apt install nodejs a legtöbb disztribúción nagyon régi
verziót telepít. Ne ezt használd!
# fnm curl -fsSL https://fnm.vercel.app/install | bash # új terminál után: fnm install 24 fnm default 24
# nvm (alternatíva) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash # új terminál után: nvm install 24 nvm use 24 nvm alias default 24
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash - sudo apt-get install -y nodejs
Linuxon soha ne használj sudo-t az
npm install-hoz egy projektben. Ha jogosultsági hibát kapsz, az azt
jelenti, hogy rossz helyre telepítenél; a megoldás a verziókezelő (fnm/nvm) használata, nem a
sudo.
Futtasd le mindet — minden sorra kapnod kell választ. Ha az utolsó parancs kiírja, hogy „Működik a Node!”, a környezeted készen áll.
node -v npm -v npx -v node -p "process.platform + ' / ' + process.arch" node -e "console.log('Működik a Node!')"
| Kapcsoló | Mit csinál |
|---|---|
node -v | Kiírja a verziót |
node -e "kód" | Lefuttat egy kódrészletet (evaluate) |
node -p "kifejezés" | Lefuttat és ki is írja az eredményt (print) |
node fajl. | Lefuttat egy fájlt |
node | Elindítja a REPL-t (interaktív konzol) |
Kattints egy parancsra: „begépelődik” a terminálba, és megjelenik a válasz. Így tudod, mit kell látnod a saját gépeden. (Ez itt beégetett kimenet, nem futtat semmit.)
Nem kell parancssori mesternek lenned, de ezekre szükséged lesz. A jó hír: a VS Code beépített terminálja mindig a megnyitott projektmappában indul, ezért a mappák közti navigálásra a gyakorlatban alig lesz szükség.
| Feladat | Windows (PowerShell) | macOS / Linux |
|---|---|---|
| Hol vagyok? | pwd | pwd |
| Mi van itt? | ls vagy dir | ls -la |
| Belépés mappába | cd webshop | cd webshop |
| Egy szinttel feljebb | cd .. | cd .. |
| Új mappa | mkdir webshop | mkdir webshop |
| Fájl tartalma | cat fajl. | cat fajl. |
| Képernyő törlése | cls | clear |
| Futó program leállítása | Ctrl + C | Ctrl + C |
| Előző parancs | ↑ | ↑ |
Az automatikus kiegészítés: írd be a mappanév első néhány betűjét, és nyomj Tab-ot. Így nem gépelsz el semmit — és ez a leggyakoribb kezdő hibaforrás.
Ha csak ki akarsz próbálni egy sor JavaScriptet, nem kell fájlt létrehozni:
node Welcome to Node.js v24.20.0. Type ".help" for more information. > 2 + 3 5 > const nev = "Anna" undefined > `Szia, ${nev}!` 'Szia, Anna!' > .exit
Kilépés: . vagy kétszer Ctrl + C.
A REPL minden beírt sor értékét kiírja. A const nev = "Anna" egy
értékadás, aminek nincs visszatérési értéke — ezért undefined. Ez nem hiba,
a változó létrejött.
Hozz létre egy mappát, benne egy elso. fájlt:
console.log("Szia, Node!"); console.log("Node verzió:", process.version); console.log("Operációs rendszer:", process.platform); console.log("Ez a fájl itt van:", import.meta.dirname);
Futtatás:
node elso.js
Amit látnod kell (a saját adataiddal):
Szia, Node!
Node verzió: v24.20.0
Operációs rendszer: win32
Ez a fájl itt van: C:\projektek\proba
process
A process egy beépített, globális objektum: a futó folyamatról ad információt.
Böngészőben ilyen nincs — ez a szerveroldal egyik árulkodó jele.
console.log("ez működik"); // ✅ alert("ez nem"); // ❌ ReferenceError: alert is not defined document.querySelector("h1"); // ❌ ReferenceError: document is not defined
Nincs window, nincs document, nincs
alert — mert nincs weboldal. Cserébe van fájlrendszer, hálózat és
folyamatkezelés.
package.json Egy Node-projekt lelke a package. fájl. Ez tartja nyilván a projekt nevét,
verzióját, a függőségeit és a futtatható parancsait. Minden projekt ezzel kezdődik:
mkdir webshop-api cd webshop-api npm init -y
Az -y (yes) minden kérdésre az alapértelmezett választ adja. Ha kérdésekkel
szeretnéd: npm init — ekkor sorban rákérdez a névre, verzióra, leírásra.
A létrejött fájl:
{
"name": "webshop-api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
| Mező | Jelentése |
|---|---|
name | A projekt neve (kisbetű, kötőjel, ékezet nélkül) |
version | A projekt saját verziója |
main | A belépési pont fájlja |
type | "commonjs" (alapértelmezett) vagy "module" — lásd a 10. szakaszt |
scripts | Saját parancsok (npm run …) |
dependencies | A futáshoz szükséges csomagok |
devDependencies | Csak fejlesztéshez kellő csomagok |
A package. kézzel is szerkeszthető, és gyakran így is
teszünk. Csak vigyázz: érvényes JSON-nak kell maradnia — nincs komment és nincs záró vessző.
(A JSON szabályait a 2. fejezetben vettük.)
Az npm (Node Package Manager) egy hatalmas nyilvános csomagtár. Innen tölthetsz le mások által megírt könyvtárakat — az Expresstől a Prismáig mindent.
npm install express # függőség telepítése (röviden: npm i express) npm install --save-dev eslint # fejlesztői függőség (röviden: npm i -D eslint) npm install # a package.json alapján MINDENT telepít npm uninstall express # eltávolítás npm outdated # mi az, ami elavult? npm list --depth=0 # mit telepítettem közvetlenül?
node_modules és a .env soha nem utazik a projekttel.Ha a projektet e-mailben vagy tömörítve adod be, a node_modules mappát
előbb töröld ki. Több száz megabájt, és bármikor újra előállítható az
npm install paranccsal a package. alapján.
Az npm-csomagok idegen kódot futtatnak a gépeden. Telepítés előtt nézd meg a csomag nevét
betűről betűre (a támadók hasonló nevű, hamis csomagokat töltenek fel — ez a typosquatting), és
ellenőrizd a heti letöltésszámot az npmjs.com-on. Az npm audit parancs kiírja
az ismert sérülékenységeket.
npx — futtatás telepítés nélkülnpx prisma init # a Prisma CLI futtatása telepítés nélkül npx create-vite@latest # projekt-generátor
Az npx letölti (ideiglenesen), futtatja, majd nem hagy maga után szemetet.
Egyszer használatos eszközökhöz — például projekt-generátorokhoz — ez az ideális.
Nyolc fájl és mappa. Döntsd el mindegyikről, hogy feltöltenéd-e a projekttel együtt verziókezelőbe! Ez a kérdés éles projektben is naponta előjön — a rossz válasz biztonsági kockázatokat rejt magában.
scriptsA package. scripts szakaszába saját parancsokat
írhatsz. Ennek az az értelme, hogy a hosszú parancsot egyszer írod le, és utána mindenki
ugyanazt a rövid nevet használja:
"scripts": { "start": "node index.js", "dev": "node --watch --env-file=.env index.js", "test": "node --test" }
Futtatásuk:
npm start # a "start" külön kezelt: nem kell a "run" npm run dev npm test npm run # kilistázza az elérhető parancsokat
Régen ehhez a nodemon csomag kellett. Ma már beépített:
node --watch index.js
A Node figyeli a fájlokat, és mentés után automatikusan újraindítja a programot. Ezért lesz
a dev scriptünk mindig ez.
node --env-file=.env index.js
A . fájl sorai (KULCS=érték) bekerülnek a
process. objektumba:
# .env PORT=3000 DATABASE_URL="mysql://root:jelszo@localhost:3306/webshop"
console.log(process.env.PORT); // 3000
A . fájl titkokat tartalmaz. Soha nem kerül verziókezelőbe!
Helyette egy . fájlt adunk át, amelyben a kulcsok szerepelnek, de az
értékek üresek. A .-ba mindig vedd fel:
node_modules/ .env
Node 22 óta van egy gyorsabb, beépített változat is: node --run dev. Ugyanazt
teszi, csak nem indít külön npm-folyamatot. Az npm run mindenhol működik,
ezért a tananyagban azt használjuk.
A Node.js-ben kétféle modulrendszer él egymás mellett. Fontos tudni, melyiket használod, mert az interneten talált példák felváltva mutatják mindkettőt — és ha összekevered őket, a program el sem indul.
Mi ESM-et használunk, mert ez a szabvány, és ezt ismered a frontendről is. Ehhez a
package.-ba fel kell venni:
{
"name": "webshop-api",
"type": "module",
"main": "index.js"
}
Példa két fájlra:
// matek.js export function osszead(a, b) { return a + b; } export const PI = 3.14159;
// index.js import { osszead, PI } from "./matek.js"; // ⚠️ a .js kiterjesztés KÖTELEZŐ! console.log(osszead(2, 3)); // 5
1. Elmarad a "type": "module" →
SyntaxError: Cannot use import statement outside a module
2. Lemarad a . kiterjesztés az importnál →
ERR_MODULE_NOT_FOUND. A frontendes buildelőknél ez elhagyható,
Node-ban nem.
3. require és import keverése
ugyanabban a fájlban → hiba.
Saját fájlnál kell a ./ és a .:
import { x } from "./utils..
npm-csomagnál viszont csak a név:
import express from "express".
Az ESM-fájlokban az útvonalhoz nem a régi __dirname, hanem ez használható:
console.log(import.meta.dirname); // a fájl mappája console.log(import.meta.filename); // a fájl teljes útvonala
Csináld végig, és minden lépésnél ellenőrizd a jelzett eredményt. Ez lesz a minta minden későbbi projekthez.
mkdir node-proba cd node-proba
npm init -y
Ellenőrzés: létrejött a package.json .package.json -t, és vedd fel a
"type": "module" sort."scripts": { "start": "node index.js", "dev": "node --watch index.js" }
index.js létrehozása
const tanulok = ["Anna", "Bence", "Csenge"]; console.log("Node verzió:", process.version); console.log("Tanulók száma:", tanulok.length); for (const nev of tanulok) { console.log(`- ${nev}`); }
npm startnpm run dev
Ellenőrzés: írj át valamit a fájlban, majd ments (Ctrl + S). A program
magától újraindul. Leállítás: Ctrl + C.npm install express
Ellenőrzés: megjelent a node_modules mappa, a
package-lock.json fájl, és a package.json -ban a
dependencies szakasz.Olvasd el a hibaüzenet első két sorát! A Node hosszú stack trace-t ír ki, de a lényeg szinte mindig az elején van: a hiba típusa, valamint a fájl és a sor, ahol keletkezett. A többi sor a hívási lánc — az ritkán érdekes.
Válaszd ki, amit a terminálban látsz — megmondom, mit jelent és mi a megoldás. Érdemes elmenteni ezt az oldalt: a következő hetekben sokszor visszatérsz ide.
| Hibaüzenet | Mit jelent? | Megoldás |
|---|---|---|
'node' is not recognized… | A Node nincs a PATH-ban | Indíts új terminált; ha nem segít, telepítsd újra |
'winget' is not recognized… | Ezen a Windowson nincs winget (LTSC, Server, felügyelt gép) | Telepíts a hivatalos . fájllal — a wingetre nincs szükség |
Cannot find module './matek' | ESM-ben lemaradt a . | import … from "./matek. |
Cannot use import statement outside a module | Hiányzik a "type": "module" | Vedd fel a package.-ba |
require is not defined in ES module scope | ESM-ben require-t használtál | Írd át import-ra |
Cannot find module 'express' | Nincs telepítve a csomag | npm install express |
EADDRINUSE: address already in use | A port foglalt — fut még egy szerver | Állítsd le (Ctrl+C), vagy válts portot |
EACCES: permission denied | Jogosultsági hiba (Linux/macOS) | Ne sudo-zz! Használj fnm/nvm-et |
npm ERR! code ENOENT … package. | Nem projekt-mappában vagy | cd a helyes mappába, vagy npm init -y |
Unexpected token a package.json-ban | Elrontott JSON (vessző, komment) | Javítsd; a VS Code aláhúzza a hibát |
npm WARN deprecated … | Egy csomag elavult | Általában figyelmen kívül hagyható |
Verziószámok. Egy projekt package.-jában ez áll:
"express": "^5.2.1". Melyik verziók telepedhetnek fel ennek alapján?
5.2.0 · 5.3.0 · 5.2.9
· 6.0.0 · 5.10.2
Melyik hova? Döntsd el, dependencies vagy
devDependencies:
express — a szerver keretrendszereeslint — kódellenőrző@prisma/client — adatbázis-hozzáférés futás közbenprisma — CLI, migrációkhozjsonwebtoken — token kezeléseMi kerülhet verziókezelőbe? Jelöld meg:
package. · package-lock. ·
node_modules/ · . ·
. · index. ·
.
Hibakeresés. Mi a hiba, és hogyan javítod?
// a package.json-ban nincs "type" mező import express from "express";
// a package.json-ban van "type": "module" import { osszead } from "./matek";
LTS. Miért páros a Node LTS-főverziója, és miért ne tegyél Current verziót éles szerverre? Írj 4-5 mondatot.
Telepítés otthon. Telepítsd fel a Node.js 24 LTS-t a saját gépedre, és készíts
képernyőképet a következő parancsok kimenetéről: node -v,
npm -v, npx -v.
Első script. Készíts egy bemutatkozas. fájlt, amely
kiírja a nevedet, a Node verzióját, az operációs rendszert és az aktuális mappa útvonalát. Futtasd
node bemutatkozas. paranccsal.
Projekt a nulláról. Hozz létre egy feladatlista nevű
projektet:
npm init -y, majd "type": "module" beállításastart és dev script felvételeindex.js , amely egy tömbben tárolt teendőket ír ki számozvanpm run dev-vel, és bizonyítsd be, hogy mentéskor újraindulModulok. Bontsd három fájlra az előző feladatot: teendok.
(adatok exportálása), kiiras. (formázó függvény exportálása),
index. (mindkettő importálása és használata). Ügyelj a
. kiterjesztésre!
Csomagok. Telepítsd az express és a
chalk csomagot, majd:
package.json és a package-lock.json változását;npm list --depth=0 parancsot;chalk-ot, és nézd meg újra a package.json -t.Környezeti változók. Készíts egy . fájlt
PORT=4000 és APP_NAME=Webshop tartalommal, majd
egy index.-t, amely kiírja ezeket. Futtasd
node --env-file=. paranccsal, és vedd fel
dev scriptként is! Készíts hozzá .
és . fájlt is.
Tíz kérdés. Válassz, és azonnal megtudod, jó volt-e — magyarázattal.
node,
npm, npx. Ellenőrzés:
node -v, npm -v..msi , macOS-en a .pkg
vagy a Homebrew, Linuxon fnm/nvm az ajánlott út. Linuxon ne
apt-tal, és soha ne sudo npm install.npm init-tel kezdődik; a
package.json a projekt leírója.npm install telepíti. A
node_modules és a .env sosem
kerül verziókezelőbe, a package-lock.json viszont igen.scripts szakaszba írjuk:
npm start, npm run dev.node --watch (nem kell nodemon),
titkokhoz --env-file=.env — mindkettő beépített."type": "module",
import/export, és saját fájloknál kötelező a
.js kiterjesztés.| Fogalom | Jelentés |
|---|---|
| Node.js | JavaScript-futtatókörnyezet a böngészőn kívül |
| LTS Long Term Support | Hosszú távon támogatott, stabil verzióvonal (páros főverziók) |
| npm Node Package Manager | A Node csomagkezelője és a nyilvános csomagtár |
| npx | Csomag futtatása állandó telepítés nélkül |
package. | A projekt leírója: név, verzió, függőségek, scriptek |
package-lock. | A telepített verziók pontos rögzítése |
node_modules | A letöltött csomagok mappája — sosem kerül verziókezelőbe |
| dependency | Futáshoz szükséges csomag |
| devDependency | Csak fejlesztéshez szükséges csomag |
| semver Semantic Versioning | Verziószámozási rendszer: major. |
| CommonJS | A Node régi modulrendszere (require) |
| ESM ECMAScript Modules | A JavaScript szabványos modulrendszere (import) — ezt használjuk |
| REPL Read–Eval–Print Loop | Interaktív Node-konzol |
process. | A környezeti változók objektuma |
. | Környezeti változókat tartalmazó, titkos fájl |
| fnm / nvm | Node-verziókezelő: több verzió egymás mellett |
| PATH | Az a listája a mappáknak, ahol a rendszer a parancsokat keresi |