Saturday, February 03, 2024

Od ideje do realizacije, kako početi sa kreiranjem i pokretanjem Node.js modula?

Ukoliko ste se upoznali sa tim šta je Node.js ali i šta nije, pogledajte ovde; i ako ste već instalirali Node.js u vaš računar; odradili lekciju 1; kreirali mali program Hello World. Još ako koristite Linux operativni sistem; npr. Ubuntu distribuciju pa makar i na virtualnoj mašini i da pri tome imate instaliran i Visual Studio Code; onda ste definitivno spremni za učenje i kodiranje u globalu JavaScript programskog jezika koristeći Node.js platformu. Kažemo u globalu jer neće baš svaki JavaScript kôd da radi na Node.js platformi. Neke stvari se kodiraju drugačije. Da, tačno je da ovaj naš Node.js tutorijal možete da pratite na kojem hoćete operativnom sistemu; isto tako umesto Visual Studio Code-a možete da koristite koje god hoćete IDE – Integrisano razvojno okruženje, naša preporuka ostaje Ubuntu i Visual Studio Code. Naravno, izbor je uvek na vama. Za razliku od raznih Framework – radni okvira, kada govorimo o Node.js, onda govorimo o platformi, tačnije o višeplatformskom okruženju. Node.js platforma nam omogućava da JavaScript programski jezik izvršavamo na serverskoj strani ili totalno van Internet pretraživača. Node.js poseduje arhitekturu na događajima koji su sposobni da obavljaju asinhrone ulaze i izlaze. Što u suštini takođe znači i da je celi Node.js ekosistem baziran na modulima preko kojih se izvršavaju takvi događaji. Ali šta su moduli?


( Modules - module u Node.js; možete posmatrati kao set funkcija koje hoćete uključiti u projekat ) 

Module najlakše možete shvatiti kao da su to manji gradivni blokovi kôda koji dele aplikaciju u manje delove ili čak mogu da se koriste u sasvim drugim delovima programa i drugim programima. Moduli u Node.js platformi uglavnom sadrže neke funkcionalnosti iskodirane u JavaScript programskom jeziku, ali tako da skrivaju implementaciju i omogućavaju eksplicitno deklarisan API - Application Programming Interface za modul. Postoje dva osnovna tipa modula u Node.js. Prvi je ugrađeni ili Core moduli dok su drugi nestandardni ili Custom moduli. Kad su u pitanju ugrađeni moduli, njih mogu da proizvode i razni drugi proizvođači. Ugrađeni moduli se uglavnom instaliraju u projekat na kojem radite i instaliran modul nazivamo paket. Spremište npm paketa je ogromna biblioteka modula koja vam stoji na raspolaganju da što lakše, bolje i brže kreirate i razvijete vašu Node.js aplikaciju. Što se tiče nestandardnih modula, njih možete da kreirate i koristite u vlastitom projektu. Ovi moduli su korisnički definisani i nisu ugrađeni u Node.js po defaultu. Koriste se kada želite organizovati svoj kôd u više fajlova radi bolje čitljivosti i održavanja. Ali isto tako možete da objavite i svoje vlastite pakete, koje onda mogu da koriste i drugi programeri. Kad je Node.js kreiran tada ES6 format modula nije ni postojao, nego se tada koristio jedino CommonJS format modula. Danas se koriste obadva, ES6 format modula možete prepoznati i po ekstenziji datoteke *.mjs iako se Node.js može konfigurisati da prepozna *.js datoteke ES6 formata modula. Obe vrste modula su konceptualno slični ali se na različite načine praktično znatno razlikuju. Rad sa modulima u Node.js je ogroman koncept koji se proteže kroz celi Node.js tutorijal i tek kroz praktičan rad sa mnogo lekcija će te imati pravi uvid u module u Node.js. Zato ovu lekciju smatrajte samo početkom putovanja kroz module u Node.js. Vreme je da pređemo na praktičan nivo i da se kroz praktične male korake upoznajete sa velikim mogućnostima i stvarima koje Node.js nudi.

Kako da kreiram i izvršim svoj vlastiti Node.js modul?

Ukoliko koristite Linux operativni sistem, Ubuntu distribuciju ili neku drugu; prvo odradite UPDATE i
UPGRADE vašeg sistema u terminalu. S obzirom da je prošlo poprilično dugo vremena od kada smo
započeli prvu lekciju Node.js tutorijala; proverite koju verziju Node.js imate instaliranu na vašem operativnom sistemu. U principu bi ste trebali uvek vršiti najnoviji Node.js update uglavnom zbog bag-ova. Zatim pređite u folder node_js_tutorial i pokrenite Visual Studio Code komandom:

manuel@manuel-virtual-machine:~/nodejs_tutorial$ code .

Kad vam se Visual Studio Code zajedno sa projektom u potpunosti otvori, u njegovom panel terminalu otkucajte sledeću komandu.

manuel@manuel-virtual-machine:~/nodejs_tutorial$ node lesson1

Server running at http://127.0.0.1:3000/ 

Držite taster Ctrl pritisnut i kliknite na link. Otvoriće se vaš pretraživač i na stranici će biti ispisano Hello World. Naravno, ovaj mali modul smo odradili još u prvoj lekciji. Danas ćemo prvo da dovedemo u red malo strukturu našeg projekta. Kreirajte novi folder u projektu i nazovite ga lesson1. Zatim u njega prebacite fajl lesson1.js. Zatim ponovo proverite da li sve radi.

manuel@manuel-virtual-machine:~/nodejs_tutorial$ node lesson1/lesson1

Server running at http://127.0.0.1:3000/

Ukoliko je sve u redu, kreirajte novi folder u glavnom direktorijumu i nazovite ga lesson2. Zatim u njemu kreirajte dva nova fajla app.js i lesson2.js. Pre nego što počnemo sa kreiranjem modula, pogledajte prvo kako da kreirate package.json fajl koji će sadržavati neke osnovne stvari o našem projektu ali i spisak svih paketa i njihovih verzija koje instalirate u vaš projekat, koje zovemo depedencies - zavisnosti. Zahvaljujući ovom *.json fajlu u mogućnosti ste da povratite sve instalirane pakete u vašem projektu u slučaju da budu oštećeni ili obrisani. Najbolje da to testiramo, odmah! Ukucajte sledeću komandu u panel terminalu.

manuel@manuel-virtual-machine:~/nodejs_tutorial$ npm init

Zatim odgovorite na par pitanja.

package name: (nodejs_tutorial) nodejs_tutorial

… Enter

description: node.js tutorial

… Enter

author: Manuel Radovanovic

… Enter

Pogledajte package.json fajl koji je kreiran i njegov sadržaj:

 {

  "name": "node_js_tutorial",

  "version": "1.0.0",

  "description": "Node.js Tutorial",

  "main": "index.js",

  "scripts": {

    "test": "echo \"Error: no test specified\" && exit 1"

  },

  "author": "Manuel Radovanovic",

  "license": "ISC"

}

I sad obratite pažnju. Pogledajte kako se instaliraju paketi u vaš projekat. Na primer prvo ćemo da instaliramo paket uuid. Uuid paket pruža funkcionalnost za generiranje kriptografski sigurnih standardnih UUID-ova sa podrškom za verzije 1, 3, 4 i 5 UUID-a, kao i podršku za više platformi za Node.js, CommonJS, Webpack, React Native Expo i još mnogo toga.

manuel@manuel-virtual-machine:~/nodejs_tutorial$ npm install uuid

Instalirajmo još jedan paket, na primer nodemon.

manuel@manuel-virtual-machine:~/nodejs_tutorial$ npm install -D nodemon

Nodemon je alat koji pomaže u razvoju aplikacija zasnovanih na Node.js automatskim ponovnim pokretanjem aplikacije čvora kada se otkriju promene datoteke u direktorijumu. U našem današnjem primeru nije toliko ni bitno koje pakete modula instaliramo, ovo radimo samo da bi ste imali uvid kako se paketi instaliraju. Pogledajte sad vašu strukturu projekta. Dobili ste novi folder node_modules i novi fajl package-lock.json. Međutim, pogledajte sadržaj package.json fajla. Njemu su dodate zavisnosti koje smo instalirali.

{

  "name": "node_js_tutorial",

  "version": "1.0.0",

  "description": "Node.js Tutorial",

  "main": "index.js",

  "scripts": {

    "test": "echo \"Error: no test specified\" && exit 1"

  },

  "author": "Manuel Radovanovic",

  "license": "ISC",

  "dependencies": {

    "uuid": "^9.0.1"

  },

  "devDependencies": {

    "nodemon": "^3.0.3"

  }

}

Zamislite sada da ste imali neku štetu na projektu. Izbrišite folder node_modules i fajl package-lock.json iz vašeg projekta. Pogledajte sadržaj package.json fajla i videćete da se sadržaj ovog fajla nije promenio. Zahvaljujući tom sadržaju oporavak našeg projekta je jednostavan. Samo pokrenite sledeću komandu u panel terminalu.

manuel@manuel-virtual-machine:~/nodejs_tutorial$ npm install

I naš projekat je povratio izgubljene pakete i fajl package-lock.json. Nadam se da vam je sada itekako jasno zašto je korisno kreirati i package.json fajl tokom kreiranja projekta. Obratite sada pažnju na naša dva nova prazna fajla app.js i lesson2.js. Otkucajte sledeći sadržaj u fajl lesson2.js.

// a variable for the internal use

var count = 0;

 

// a function which use the variable for the internal use

const next = function() { return ++count; };

 

// a constant for the external use

const PI = 3.14;

 

// a function for the external use

const sum = (num1, num2) => num1 + num2;

 

// a class for the external use

class Student {

    // constructor

    constructor(fname, lname, subject) {

        this.fname = fname;

        this.lname = lname;

        this.subject = subject;

    }

 

    // method

    introduction() {

        console.log(`Hello! My name's ${this.fname} ${this.lname}, and I study ${this.subject}.`);

 

    }

   

}

 

module.exports.next = next;

module.exports.PI = PI;

module.exports.sum = sum;

module.exports.Student = Student;

U ovom modulu smo prvo ispisali kako se kreira neka promenjiva count koja ima samo opseg u navedenom fajlu ali i ne van njega. Ukoliko pažljivije pogledate na dnu fajla videćete da i ne postoji module.exports za promenjivu count. Module.exports je deo CommonJS formata modula specifikacije koji definiše objekt koji se kreira da bi neka druga datoteka mogla da uveze i koristi korišćenjem funkcije require(). Zatim smo kreirali jednu običnu funkciju koja koristi promenjivu count, ali funkcija next() ima svoj module.exports i zbog toga može da se pozove i koristi u drugom fajlu. Takođe smo kreirali jednu konstantnu, funkciju i klasu sa konstruktorom i metodom i svima njima omogućili da mogu da se koriste pozivanjem novo kreiranog modula. Da bi ste videli kako to sve funkcioniše otkucajte sledeći sadržaj u app.js fajl.

const lesson2 = require('./lesson2');

 

console.log(lesson2);

person1 = new lesson2.Student('Manuel', 'Radovanovic', 'Computer Science');

 

console.log(person1);

console.log(person1.introduction());

 

console.log(lesson2.PI);

console.log(lesson2.sum(5,10));

 

console.log(lesson2.next());

console.log(lesson2.next());

console.log(lesson2.next());

Prva konstanta lesson2 koristi funkciju require() kako bi bukvalno uvezla modul lesson2.js. Nije potrebno da navodite egzistenciju fajla, ali je poželjno da moduli budu u istom direktorijumu. Kreiranje i korišćenje konstanti u Node.js je često zbog toga što se na taj način smanjuje ispis kôda i zaobilaze greške prilikom kucanja. Sve što je definisano u modulu koji se poziva sa module.exports se može koristiti u fajlu koji poziva modul. Otkucajte sledeću komandu u terminal panelu.

manuel@manuel-virtual-machine:~/nodejs_tutorial$ node lesson2/app

Dobićete sledeći rezultat.

{

  sum: [Function: sum],

  PI: 3.14,

  Student: [class Student],

  next: [Function: next]

}

Student {

  fname: 'Manuel',

  lname: 'Radovanovic',

  subject: 'Computer Science'

}

Hello! My name's Manuel Radovanovic, and I study Computer Science.

undefined

3.14

15

1

2

3

Što se tiče optimizacije koda; u fajlu lesson2.js; zakomentarišite sledeći deo kôda:

/*

module.exports.next = next;

module.exports.PI = PI;

module.exports.sum = sum;

module.exports.Student = Student;

*/

Ovo isto možete pisati i na ovaj skraćeni način.

module.exports = { sum:sum, PI:PI, Student:Student, next:next }

Kako smo sve ovo kreirali i kako sve ovo izgleda, možete pogledati i u video-u:


( Node.js - 1. How to create and run a Node.js module? )















 


 

No comments:

Post a Comment