Kihagyás

Node Package Manager (NPM)

A Node.js-hez tartozó Node Package Manager (NPM) egy olyan csomagkezelő, amely lehetővé teszi a JavaScript csomagok keresését, telepítését, frissítését, valamint a projektünk függőségeinek kezelését. Az NPM a Node.js telepítésével együtt kerül telepítésre, így nem szükséges külön telepíteni.

Emlékeztető

Pythonban már láthattunk egy hasonló csomagkezelőt, a pip-et.

Figyelem

Nem összekeverendő az NPM (Node Package Manager) és az NVM (Node Version Manager) szoftvereket. Az NVM a Node.js verziók kezelésére szolgál, míg az NPM a csomagok kezelésére.

Projekt parancsok

Az NPM használatához a terminálban a npm parancsot kell használnunk. Az alábbiakban néhány gyakran használt parancs található.

Projekt telepítése

Ha már van egy projektünk, amely tartalmazza a package.json fájlt, akkor a következő paranccsal telepíthetjük a projekt függőségeit:

npm install

Emlékeztető

Pythonban a pip install -r requirements.txt parancs hasonló funkciót lát el.

Csomag hozzáadása

Ha egy új csomagot szeretnénk hozzáadni a projektünkhöz, akkor a következő paranccsal tehetjük meg:

npm install <package> --save

A --save kapcsoló segítségével az NPM automatikusan hozzáadja a csomagot a package.json fájlhoz. Ebben az esetben természetesen mindazon túl, hogy a csomag hozzáadásra kerül a projekthez (a package.json fájlhoz), telepítésre is kerül, tehát megjelenik a node_modules mappában is.

Emlékeztető

Pythonban a pip install <package> parancs hasonló funkciót lát el, azonban a requirements.txt fájlba a pip freeze > requirements.txt paranccsal kell hozzáadni a csomagot.

package.json

Korábban már megismerkedtünk a package.json fájllal, amely a Node.js projektek fő konfigurációs fájlja. Ez a fájl gondoskodik a függőségek kezeléséről is, amely során két fontos kategóriát különböztetünk meg.

dependencies

Ezek azok a csomagok, amelyekre a projekted futási időben szüksége van. Például, ha egy webalkalmazást fejlesztünk, akkor valószínűleg szükségünk lesz egy webkiszolgáló keretrendszerre, mint az express. Ezeket a csomagokat akkor telepítjük, amikor valaki a projektet használja, például az npm install parancs kiadásakor.

dependencies példa express csomaggal

Az alábbi példában láthatjuk az express csomag telepítését, amely a fenti parancs kiadását követően jön létre.

{
    "name": "demo",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "dependencies": {
        "express": "^4.19.2"
    }
}
devDependencies

Ezek azok a csomagok, amelyekre csak a fejlesztés során van szükség, mint például a tesztelési keretrendszerek, lint eszközök, build eszközök stb. Ezek nem kerülnek telepítésre a futási környezetben, csak a fejlesztési környezetben.

Amennyiben ilyen módon szeretnénk egy csomagot hozzáadni a projektünkhöz, akkor a következő paranccsal tehetjük meg:

npm install <package> --save-dev

Példa

Telepítsük az "eslint" csomagot a projektünkbe, mint fejlesztési függőség.

npm install eslint --save-dev
{
    "name": "demo",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "dependencies": {
        "express": "^4.19.2"
    },
    "devDependencies": {
        "eslint": "^9.9.1"
    }
}

package-lock.json

A csomag hozzáadása után láthatjuk, hogy létrejön egy package-lock.json fájl is.

De mi is ez a fájl, és mi a különbség a package.json fájlhoz képest? A package.json és a package-lock.json fájlok mind a Node.js projektekben használatosak, de különböző célt szolgálnak. Íme a fő különbségek:

Cél és funkció

package.json:

  • Ez a fájl a projekt fő konfigurációs fájlja, amely tartalmazza a projekt nevét, verzióját, szerzőjét, licencét és egyéb metaadatokat.
  • Felsorolja a projekt függőségeit (dependencies), dev-függőségeit (devDependencies), és esetleg más típusú függőségeit (pl. peerDependencies, optionalDependencies).
  • Lehetővé teszi parancsfájlok (scripts) definiálását, amelyeket a projekt futtatásakor használhatsz, például npm start, npm test, stb.
  • Az új függőségek hozzáadásakor vagy eltávolításakor ez a fájl frissül.

package-lock.json:

  • Ez a fájl automatikusan generálódik a package.json alapján, amikor függőségeket telepítesz (npm install).
  • A package-lock.json pontosan rögzíti a telepített függőségek (és azok alfüggőségeinek) verzióit és letöltési útvonalait.
  • Célja, hogy biztosítsa a reprodukálható építési folyamatot, azaz, hogy mindenki, aki a projektet telepíti, ugyanazokat a függőségeket kapja meg, ugyanazon verziókkal.
Tartalom és struktúra:

package.json:

  • Ember által olvasható és kézzel szerkeszthető.
  • A függőségek verziószámát itt általában tól-ig verziókban adják meg (pl. ^1.0.0), ami megengedi, hogy egy bizonyos tartományon belül újabb verziók telepítésre kerüljenek.
  • Tartalmazza a projekt metaadatait és a parancsfájlokat (scripts).

package-lock.json:

  • Géppel olvasható és nem szokás kézzel szerkeszteni.
  • Pontosan rögzíti a telepített függőségek és azok alfüggőségeinek verzióit, beleértve a pontos verziószámokat (pl. 1.0.3).
  • Tartalmazza a csomagok telepítési útvonalát, ellenőrzőösszegét és egyéb telepítési információkat.
Fájl kezelése és frissítése:

package.json:

  • Kézzel is szerkeszthető, például ha új függőséget szeretnél hozzáadni a projektedhez.
  • Módosul, ha új csomagokat telepítesz, frissítesz, vagy eltávolítasz.

package-lock.json:

  • Automatikusan generálódik és frissül, amikor az npm install parancsot futtatod.
  • Közvetlen szerkesztése nem ajánlott, mivel az hibákhoz vezethet a telepítés során.
Reprodukálhatóság

package.json:

  • Megadja, milyen típusú csomagokra van szükség, de nem rögzíti pontosan, hogy melyik verzió kerül telepítésre.
  • Nélküle a telepítési eredmények eltérhetnek, mivel a megadott verziótartományon belüli legfrissebb verziókat telepíti az npm.

package-lock.json:

  • Rögzíti a pontos verziókat és telepítési részleteket, így biztosítja a projekt reprodukálhatóságát minden környezetben.
  • Összefoglalva, a package.json egy általános konfigurációs fájl a projekted számára, míg a package-lock.json biztosítja, hogy a függőségek pontos verziói mindig ugyanazok legyenek minden telepítés során.

Csomag eltávolítása

Ha egy csomagot szeretnénk eltávolítani a projektünkből, akkor a következő paranccsal tehetjük meg:

npm uninstall <package> --save

Emlékeztető

Pythonban a pip uninstall <package> parancs hasonló funkciót lát el.

Csomag frissítése

Ha egy csomagot szeretnénk frissíteni a projektünkben, akkor a következő paranccsal tehetjük meg:

npm update <package>

Csomagok listázása

Ha szeretnénk megnézni, hogy milyen csomagok vannak telepítve a projektünkben, akkor a következő paranccsal tehetjük meg:

npm list

Példa

[email protected] C:\Users\richa\Desktop\demo
├── [email protected]
└── [email protected]

Globális parancsok

Csomagok globális telepítése

Lehetőségünk van a csomagot nem kizárólag egyetlen projektbe telepíteni, hanem globálisan is. Ekkor a csomagot a következő paranccsal telepíthetjük:

npm install -g <package>

Globális csomagok listázása

Ha szeretnénk megnézni, hogy milyen globális csomagok vannak telepítve a rendszerünkön, akkor a következő paranccsal tehetjük meg:

npm list -g

Példa

C:\Program Files\nodejs -> .\
└── [email protected]

Globális csomagok eltávolítása

Ha egy globális csomagot szeretnénk eltávolítani a rendszerünkről, akkor a következő paranccsal tehetjük meg:

npm uninstall -g <package>