X

NodeJs NPM – A nyakkendős modulraktáros

A előző NodeJs postban a modulokat taglaltam. Most nézzük meg, hogy mi van, ha nem mi írunk magunknak, hanem már előre elkészített modul-csomagokat szeretnénk használni, amik szerepelnek a hivatalos NodeJs csomag-jegyzékben. Erre való az NPM (Node Packaged Modules).

Az NPM egy különálló project, mely a csomagkezelést hivatott segíteni, könnyebbé tenni. Ez egészen odáig jutott, hogy jelenleg belekerült már a hivatalos Node telepítő csomagba, így ha valaki feltelepíti a Node-ot, automatikusan kapja vele együtt a NPM-et is. Amúgy a NPM-nek független weboldala van, itt. A Node részét képezi ugyan, de a Node weboldalán található külön menüpont is erre az oldalra mutat.

Jelenleg több, mint 27 000 csomag található meg a repóban és ez a szám folyamatosan csak növekszik. Döbbenetes érték, és tökéletesen mutatja azt, hogy mennyire népszerű a Node. Regisztrálhatunk magunknak egy hozzáférést, de erre csak akkor lesz szükségünk, ha a saját magunk által írt, új csomagot szeretnék publikálni. Ahhoz, hogy használjuk a csomagokat, nem kell tennünk semmi mást, csak installálni azt a NPM segítségével.

Csomag telepítése

Számos nagy sikerű csomag létezik, ezek közül is kiemelném az Express-t és a Socket.IO-t. A későbbiekben fogok ezekkel foglalkozni.  Most példaképpen telepítsük fel az Express-t. Ehhez nem kell semmi mást tennünk, mint kiadni a következő parancsot:

$ npm install express

Ugye milyen bonyolult volt? :) A csomagkezelő feltelepíti a szükséges modulokat, függőségeket. A NPM-nek természetesen vannak kapcsolói és más opciói is. De ne szaladjunk előre… A legfontosabb dolog az, hogy amikor a fenti parancsot kiadjuk, a program a megadott csomagot az aktuális könyvtárba fogja telepíteni, LOKÁLISan a korábbi post-ban már említett node_modules könyvtárba! És itt álljunk meg egy kicsit, mivel fontos dologhoz érkeztünk…

Lokális és globális telepítés

Alapértelmezés szerint a NPM lokális telepítést hajt végre. Ez az előbb említett módon, az aktuális könyvtárban létrehoz (ha még nem létezik) egy node_modules könyvtárat és ebbe fogja a szükséges modulokat letölteni. Abban az esetben, ha készítünk egy alkalmazást, tudunk hivatkozni az adott modulra. Ellenben, ha kilépünk ebből a könyvtárból és egy másikban készítünk el egy programot, akkor ott már nem tudunk erre lokálisan telepített modulra hivatkozni. Lássunk egy példát!

Hozzunk létre két könyvtárat:

$ mkdir app01
$ mkdir app02

Lépjünk be az elsőbe és telepítsük az Express-t:

$ cd app01
$ npm install express

Készítsünk egy test04.js file-t:

$ touch test04.js

És hívjuk meg benne az előbb telepített Express modult:

var localExpress = require('express');

Mentsük el és futtassuk:

$ node test04.js

Látszólag semmi nem történik, csak visszakapjuk a prompt-ot. Valójában a program lefutott hiba nélkül, tehát a lokális modult megtalálta és betöltötte a localExpress változóba.

Most lépjünk át az app02 könyvtárba és hozzuk létre a test05.js file-t:

$ cd ../app02
$ touch test05.js

A tartalma legyen ugyan az, mint a test04.js file:

var localExpress = require('express');

Mentsük el és futtassuk:

$ node test05.js

És íme, megkaptuk az első Node hibánkat, ami a jelen esetben tökéletesen megfelelő számunkra! Valami ilyesmit:

module.js:340
 throw err;
 ^
Error: Cannot find module 'express'
 at Function.Module._resolveFilename (module.js:338:15)
 at Function.Module._load (module.js:280:25)
 at Module.require (module.js:364:17)
 at require (module.js:380:17)
 at Object.<anonymous> (/root/nodejs-tutorials/app02/test05.js:1:82)
 at Module._compile (module.js:456:26)
 at Object.Module._extensions..js (module.js:474:10)
 at Module.load (module.js:356:32)
 at Function.Module._load (module.js:312:12)
 at Function.Module.runMain (module.js:497:10)

Mi is ez? Ez azt mutatja, hogy amit az egyik könyvtárban telepítettünk modult, azt a másik könyvtárban nem tudjuk használni, mivel lokálisan telepítettük!

Természetesen van lehetőségünk arra is, hogy csak egyszer kelljen telepíteni a modult és bármelyik alkalmazásunk elérje azt. Ez a globális telepítés. De mi is történik ilyenkor? A válasz egyszerű: a különbség csak annyi a lokális és globális telepítő között, hogy a globális esetében (Unix rendszeren) az /usr/local/lib/node_modules könyvtárba kerülnek a csomagok. Ezt bármelyik Node alkalmazásunk eléri. Az /usr/local prefix módosítható természetesen a konfigurációban, ha máshol szeretnék tárolni ezeket. Az ide vonatkozó dokumentáció itt olvasható.

Link

Létezik egy köztes megoldás is, mely segítségével a lokálisan telepített csomagokat elérhetjük más alkalmazásokban is. Ez a Link-elés.

Ehhez a következőket kell tennünk: belépünk abba a könyvtárba, ahol a modult telepítettük (app01):

$ cd ../app01/node_modules/express/

Majd elkészítjük a linket, amit használhatunk majd a másik alkalmazásunknál:

$ npm link

Átlépünk az app02 könyvtárba és definiáljuk a modul-linket, amit használni akarunk:

$ cd ../../../app02
$ npm link express

Ha jól csináltunk eddig mindent, akkor a könyvtárban létrejött a node_modules alkönyvtár és benne az Express link. Most próbáljuk meg futtatni a test05.js programot, ami korábban hibát dobott.

$ node test05.js

Gratulálok! Sikeresen elkészítettük a linkelést a lokális csomagra.

Hogyan lehet megszüntetni a linkelt csomagokat? Abban a programkönyvtárban, ahol nincs szükség az adott link-re (példánkban az app02 könyvtár), adjuk ki a következő parancsot a csomag nevével:

$ npm unlink express

Csomag törlése

A telepítés ellentéte…

$ npm uninstall <csomagnév>

És ebből is létezik a globális verzió a globálisan telepített csomagokhoz.

$ npm uninstall -g <csomagnév>

Csomagok frissítése

A csomagok folyamatosan frissülnek a készítők által. Ahhoz, hogy nekünk is mindig naprakész verziók legyen mindenből, ki kell adni a frissítési parancsot:

$ npm update

Csomag keresése

Ha szeretnénk megnézni, hogy mely csomagok kerültek fel a rendszerünkre, akkor azt a

$ npm list

paranccsal tehetjük meg. Itt látni fogjuk a csomagfüggőségeket is.

Ha szűrni szeretnénk egy névre, például szeretnénk megtudni, hogy a  Which modult használjuk-e valahol vagy függőségek között szerepel-e, akkor:

$ npm list Which

 

 

Hasonló cikkek

NodeJs + Express és HTTPS Előfordulhat, hogy szükségünk van egy SSL-es webszerverre a NodeJs-es környezetünkben. Ugyebár webszervert Express-szel a legegyszerűbb készíteni, ami...
APE Server – 1. rész: A Majom leszállt Tegnap Friday afternoon Project keretén belül elkezdtem feltelepíteni egy APE szervert. Már rég óta tervezem ezt, de eddig még nem jutott rá időm sajn...
Git szerver telepítés Synology NAS-on Az otthoni munkáim során is szükség van verziókövető rendszerre a fejlesztéseknél. A legkézenfekvőbb megoldás, hogy a már amúgy is használatban lévő N...
3-way merge tool Git-hez – P4Merge Aki már dolgozott verziókövető rendszerekkel, tudja, hogy amikor kódot írunk, ráadásul nem egyedül, hanem csapatban fejlesztünk, óhatatlan, hogy egy m...
Sas Sam:
Related Post