Egy korábbi post-ban bemutattam, hogy mi is a NodeJs és hogyan kell telepíteni, valamint túl vagyunk az első „Hello World!” programunkon is. A mostani, rövid kis post-ban megnézzük, hogy hogyan lehet modulokhoz jutni és használni őket. Nem is húzom az időt, lássunk is hozzá!
A NodeJs alapértelmezetten is rendelkezik beépített modulokkal. Nem is eggyel. A legutóbbi post-ban is láthattunk példát már rá (http), de nem tértem ki rá részletesen. Ez alapján elkülöníthetjük a dolgot két részre: belső, beépített (core) modulok és külső, letölthető, modulok, melyek általában mások által fejlesztett, úgynevezett 3rd party modulok.
Mire jó?
A modulok tulajdonképpen nem mások, mint újra és újra felhasználható függvénykönyvtárak. Egy elkülönített kódblokk, mely univerzálisan alkalmazható más alkalmazásokban.
Nézzünk egy egyszerű példát! tegyük fel, hogy írunk egy matematikai modult, mely tartalmaz pár olyan függvényt, melyre később is szükségünk lesz. Legyen ez a math.js file, amit hozzunk is létre a következő tartalommal:
var PI = Math.PI; exports.korTerulet = function(sugar) { return sugar * sugar * PI; }; exports.teglalapTerulet = function(a, b) { return a * b; };
Ez a matek modulunk, amivel tudunk kör, illetve téglalap területet számolni. Most próbáljuk meg felhasználni. Hozzunk létre egy test03.js file-t és a tartalma legyen a következő:
var matek = require('./math.js'); var sugar = 3; console.log('A(z) ' + sugar + ' egység sugarú kör területe: '+matek.korTerulet(sugar));
Futtassuk le! A konzolban adjuk ki a következő parancsot:
$ node test03.js
Ha mindent jól csináltunk, megkapjuk a fenti szöveget, behelyettesítve az értékkel és a végeredménnyel.
Core modules
Számos modullal rendelkezik alapból a rendszer, melyek nagyon hasznosak és már ezekkel is egy végtelenhez közelítő számot kapunk amely a lehetőségeinket számszerűsíti a segítségükkel. Ha valaki a konkrét, teljes listát szeretné látni, akkor nem kell mást tennie, mint a forrás lib/ könyvtárába belenézni és máris látni fogja a terjedelmes listát.
Én most csak párat emelnék ki közülük, abc sorrendben: child_process, cluster, crypto, dns, domain, fs, http, net, os, stream, zlib.
Ezekből is látszik, hogy már alapból mennyire sokrétű az rendszerünk. A modulokra való hivatkozás a require() függvénnyel történni, melynek paraméterként a modul nevét kell megadnunk. Ez egy core modul esetén a következőképpen néz ki:
require('http')
Fontos tudni, hogy amennyiben egy saját modult készítünk és annak is valamilyen oknál fogva ugyan ezt a http nevet adnánk, akkor is a beépített, „gyári” modul fog betöltődni. Tehát jobb tisztában lenni azzal, hogy mik a core modul nevek, mielőtt elnevezzük a sajátunkat.
Külső modulok
Amennyiben nem beépített modult szeretnénk betölteni, úgy szükség van a modul elérési útjára. Ez a require() függvényt tartalmazó file-hoz viszonyított relatív útvonal. Tehát ha az alkalmazásunkkal egy könyvtárban van a modul file is, akkor elegendő a ./ útvonal. De természetesen lehetőségünk van a teljes, úgynevezett abszolút útvonalat is megadhatunk, mint például /home/foo/bar.js .
Fontos, hogy amennyiben nem adunk meg semmilyen útvonalat, csak a modul nevét, a rendszer először belső modultként fogja keresni, majd ha nem talál ilyen nevűt, akkor a könyvtárban lévő node_modules alkönyvtárat fogja keresni és abban kezd el kutatni a file után.
Ha a fent említett lehetőségek közül egyik sem jár sikerrel, akkor egy MODULE_NOT_FOUND hibával tér vissza a függvény a code property-ben.
Amennyiben többet is szeretnénk tudni a modulkezelésről, látogassuk meg a Node hivatalos API kézikönyv oldalát a témával kapcsolatban: http://nodejs.org/api/modules.html