IlmHamroh
JavaScript Full-stack/8-qism. JavaScript asoslari2/61-dars14 daqiqa
Mundarija (29)

JavaScript'da birinchi dastur: konsol, script tegi va Node.js

Qisqacha: JavaScript kodini uch joyda ishga tushirish mumkin. Brauzer konsolida (F12 → Console) — tez sinab ko'rish uchun. HTML sahifada <script> tegi orqali — sayt uchun. Terminalda node app.js buyrug'i bilan — server va skriptlar uchun. console.log("Salom") uchalasida ham ishlaydi, faqat natija turli joyda chiqadi.

Bu darsda

  • Brauzer konsolida kod yozib, natijani o'qiy olasiz (va u yerdagi undefined nimaligini bilasiz).
  • JavaScript'ni HTML sahifaga ichida yozib ham, alohida .js fayl qilib ham ulay olasiz.
  • defer, async va type="module" skript bajarilish tartibini qanday o'zgartirishini tushuntira olasiz.
  • .js faylni terminalda node bilan ishga tushira olasiz.
  • Boshlovchilarning 7 ta keng tarqalgan xatosini taniysiz.

Oldin bilishingiz kerak: JavaScript nima va u qayerda ishlaydi, Birinchi sahifa: yaratish, ochish va ko'rish, Skriptlarni ulash: defer, async, module, Node.js nima va uni o'rnatish.

1. Nega bu kerak?

O'tgan darsda JavaScript brauzerda ham, Node.js'da ham ishlashini ko'rdingiz. Endi amaliy savol: kodni qayerga yozaman va qanday ishga tushiraman?

Oshpazni tasavvur qiling. U yangi ziravorni avval qoshiqda tatib ko'radi. Keyin uni mijozlarga beriladigan qozonga soladi. Uyda esa o'zi uchun alohida pishiradi. JavaScript'da ham uchta "oshxona" bor:

Usul Qachon kerak Natija qayerda
Brauzer konsoli Bir-ikki qatorni tez sinash Console panelida
HTML'dagi <script> Sayt uchun kod Sahifada va Console panelida
Terminalda node Server, bot, yordamchi dastur Terminalda

Uchalasini ham bugun qo'lingiz bilan sinab ko'rasiz.

2. 1-usul: brauzer konsoli

2.1 Konsolni ochish

Konsol — brauzer ichidagi "qoralama daftar". Kodni yozasiz, Enter bosasiz — javob darhol chiqadi. Hech qanday fayl yaratish shart emas.

Ochish yo'llari:

Qayerda Qanday ochiladi
Chrome, Edge (Windows) F12 → Console yoki Ctrl + Shift + J
Chrome (Mac) Cmd + Option + J
Firefox Ctrl + Shift + K

Maslahat: Toza konsol kerak bo'lsa, manzil qatoriga about:blank deb yozing. Bu — bo'sh sahifa. Unda boshqa saytning xabarlari aralashmaydi.

2.2 Birinchi buyruq va sirli undefined

Konsolga yozing va Enter ni bosing:

js
console.log("Salom, dunyo!");

Konsolda ikki qator paydo bo'ladi:

text
Salom, dunyo!
undefined

Birinchi qator tushunarli — buni console.log chiqardi. Lekin ikkinchi qatordagi undefined qayerdan keldi? Xato qildingizmi? Yo'q.

Konsol har safar ikki ish qiladi. Avval yozganingizni bajaradi. Keyin "bu buyruqning natijasi nima bo'ldi?" degan savolga javob chiqaradi.

  • 2 + 2 yozsangiz, natija — 4. Konsol uni ko'rsatadi.
  • console.log(...) esa matnni ekranga chiqaradi, lekin o'zi hech qanday natija qaytarmaydi. "Hech narsa" JavaScript'da undefined deb ataladi.

Hayotdan misol: siz ukangizni do'konga "Aliga salom aytib kel" deb yubordingiz. U borib salomni aytdi — ish bajarildi. Qaytib kelganda qo'lida hech narsa yo'q. undefined — o'sha bo'sh qo'l.

Brauzer konsolida undefined odatda kulrang va oldida ← kabi belgi bilan chiqadi. Bu console.log chiqargan matn emas, konsolning o'z izohi. Node.js REPL'i ham xuddi shunday qiladi. undefined haqida alohida darsda batafsil gaplashamiz.

Maslahat: "Salom, dunyo!" (inglizchasi "Hello, World!") — dasturchilarning an'anaviy birinchi dasturi. U 1970-yillardagi dasturlash kitoblaridan boshlangan. Endi siz ham shu an'anaga qo'shildingiz!

2.3 Konsolning qulayliklari

Tugma Nima qiladi
Enter Kodni bajaradi
Shift + Enter Yangi qatorga o'tadi (bajarmaydi)
↑ / ↓ Oldingi buyruqlarni qaytaradi
Ctrl + L Konsolni tozalaydi
Tab yoki → Taklif qilingan so'zni to'ldiradi

Chrome yana bir qulaylik qiladi: siz yozayotganingizda javob pastda kulrang harflarda oldindan ko'rinadi. 5 * 3 deb yozing — Enter bosmasdan 15 ko'rinadi.

Diqqat: Konsolga birinchi marta kod joylashtirsangiz (Ctrl + V), Chrome ogohlantiradi va allow pasting deb yozishni so'raydi. Bu bejiz emas. Firibgarlar Telegram'da "bu kodni konsolga qo'ysangiz, bepul premium olasiz" deb yozishadi. Aslida kod sizning akkauntingizni o'g'irlaydi. Qoida: tushunmagan kodingizni hech qachon konsolga qo'ymang.

Tekshirib ko'ring: Konsolga 10 * 5 yozsangiz nima chiqadi? console.log(10 * 5) yozsangiz-chi?

Javob

10 * 5 — bitta qator: 50. Bu konsolning o'zi ko'rsatgan natija.

console.log(10 * 5) — ikki qator: avval 50 (buni console.log chiqardi), keyin undefined (bu console.log buyrug'ining o'z natijasi — "hech narsa").

3. 2-usul: HTML sahifada <script> tegi

Konsolda yozgan kodingiz sahifa yangilanishi bilan yo'qoladi. Sayt uchun kod esa doim saqlanib turishi kerak. Buning uchun kod HTML sahifaga ulanadi.

3.1 Sahifa ichida yozish (inline)

VS Code'da salom-js degan papka oching va unda index.html yarating:

html
<!DOCTYPE html>
<html lang="uz">
<head>
  <meta charset="UTF-8">
  <title>Birinchi JS</title>
</head>
<body>
  <h1>Salom!</h1>

  <script>
    console.log("Sahifa ichidagi skript ishladi");
  </script>
</body>
</html>

Faylni brauzerda oching. Sahifada faqat "Salom!" sarlavhasi ko'rinadi. Xabar qani? F12 → Console'ga o'ting — u o'sha yerda.

Bu muhim: console.log sahifaga emas, konsolga yozadi. Dasturchi uchun u — xizmat daftari. Oddiy foydalanuvchi uni ko'rmaydi. Sahifaning o'zini JavaScript bilan o'zgartirishni brauzer qismida o'rganamiz.

<script> ichidagi kod inline skript (sahifa ichidagi skript) deyiladi. Kichik sinovlar uchun qulay. Lekin kod ko'paygan sari HTML chalkashib ketadi.

3.2 Alohida faylda yozish (tashqi skript)

Real loyihalarda JavaScript alohida .js faylda yoziladi. Papkangiz shunday ko'rinishga keladi:

text
salom-js/
├── index.html
└── script.js

script.js fayliga yozing:

js
console.log("Salom! Men alohida fayldan keldim.");
console.log("2 + 3 =", 2 + 3);

index.html da <script> tegiga src atributini qo'shing:

html
<body>
  <h1>Salom!</h1>
  <script src="script.js"></script>
</body>

Sahifani yangilang (F5). Console'da:

text
Salom! Men alohida fayldan keldim.
2 + 3 = 5

console.log ga vergul bilan bir nechta narsa bersangiz, ularni bo'sh joy bilan ketma-ket chiqaradi. Bunga keyingi darsda yana qaytamiz.

Nega alohida fayl yaxshiroq?

  • Tartib. HTML — tuzilish uchun, .js — xatti-harakat uchun. Xuddi CSS'ni alohida .css faylga chiqarganingiz kabi.
  • Qayta ishlatish. Bitta script.js ni o'nta sahifaga ulash mumkin.
  • Tezlik. Brauzer faylni bir marta yuklab, keyingi safar xotiradan (keshdan) oladi.

src dagi yo'l — nisbiy yo'l, xuddi <img src> va <link href> dagidek. script.js HTML bilan bir papkada bo'lsa, faqat nomini yozasiz. js papkasi ichida bo'lsa — src="js/script.js".

3.3 Skript qachon ishlaydi?

Brauzer ishlashi darsida ko'rgansiz: brauzer HTML'ni yuqoridan pastga o'qiydi. Oddiy <script> ga yetganda u to'xtaydi. Skriptni yuklaydi, bajaradi va shundan keyingina sahifani o'qishda davom etadi.

Buni o'z ko'zingiz bilan ko'ring. <head> ichiga shu skriptni qo'shing:

html
<head>
  <meta charset="UTF-8">
  <title>Birinchi JS</title>
  <script>
    alert("Kuting! Sahifa hali o'qilmadi.");
  </script>
</head>

Sahifani yangilang. Oyna chiqadi, lekin uning ortida sahifa bo'm-bo'sh — "Salom!" sarlavhasi yo'q. OK ni bosganingizdan keyingina sarlavha paydo bo'ladi.

Brauzer <head> dagi skriptni bajarayotgan paytda <body> ga hali yetib bormagan. Shuning uchun uzoq ishlaydigan skript sahifa ochilishini sekinlashtiradi. Yana bir muammo: bunday skript sahifadagi elementlarni topolmaydi, chunki ular hali yaratilmagan.

Ikki yechim bor:

  1. Skriptni <body> ning eng oxiriga qo'yish — eski, lekin ishlaydigan usul.
  2. <head> da qoldirib, defer atributini qo'shish — zamonaviy usul.

3.4 defer, async va type="module"

HTML qismida bu atributlarni ko'rgansiz. Endi ular kod bajarilish tartibini qanday o'zgartirishini ko'ramiz.

Atribut Sahifa o'qilishini to'xtatadimi? Qachon bajariladi Tartib
(yo'q) Ha Brauzer yetib kelishi bilan Yozilgan tartibda
defer Yo'q Butun HTML o'qilgandan keyin Yozilgan tartibda
async Yo'q Fayl yuklanishi bilan, darhol Kafolat yo'q
type="module" Yo'q defer kabi — HTML'dan keyin Yozilgan tartibda
  • defer — "keyinga qoldir". Fayl sahifa bilan parallel yuklanadi, lekin HTML to'liq o'qilgandan keyin bajariladi. Bir nechta defer skript yozilgan tartibda ishlaydi. Oddiy sayt uchun eng yaxshi tanlov shu.
  • async — "tayyor bo'lishi bilan bajar". Qaysi fayl oldin yuklansa, o'sha oldin ishlaydi. Shuning uchun boshqa kodga bog'liq bo'lmagan skriptlar uchun ishlatiladi. Masalan, tashrif statistikasini yig'adigan Google Analytics yoki Yandex Metrika.
  • type="module" — zamonaviy JavaScript modullari. U o'zi defer kabi ishlaydi, qo'shimcha atribut shart emas. Modul boshqa fayllardan kod olib kira oladi (import) — ya'ni boshqa faylda yozilgan tayyor kodni o'z faylingizga chaqirib ishlatadi. Hozir bilish shart emas: buni modullar qismida o'rganamiz.

Diqqat: defer va async faqat src bor skriptda ishlaydi. <script defer> ichiga to'g'ridan-to'g'ri kod yozsangiz, brauzer defer ni e'tiborsiz qoldiradi va kodni darhol bajaradi.

Tavsiya: bu kursning brauzer misollarida skriptni <head> ichiga defer bilan ulaymiz:

html
<head>
  <meta charset="UTF-8">
  <title>Birinchi JS</title>
  <script defer src="script.js"></script>
</head>

Tekshirib ko'ring: <head> da ikkita skript bor: <script defer src="menyu.js"> va <script defer src="savat.js">. savat.js kichikroq va oldinroq yuklandi. Qaysi biri birinchi bajariladi?

Javob

menyu.js. defer skriptlar yuklanish tezligidan qat'i nazar, HTML'da yozilgan tartibda bajariladi. Agar ikkalasida async bo'lganda edi, oldin yuklangan savat.js birinchi ishlagan bo'lardi.

4. 3-usul: Node.js bilan terminalda

4.1 node app.js

Brauzersiz ham JavaScript ishlatish mumkin. salom-js papkasida app.js faylini yarating:

js
console.log("Assalomu alaykum!");
console.log("Men terminalda ishlayapman.");
console.log(1500 * 12);

VS Code terminalini oching (Ctrl + `). Terminal salom-js papkasida turganiga ishonch hosil qiling va yozing:

bash
node app.js

Konsolda:

text
Assalomu alaykum!
Men terminalda ishlayapman.
18000

Node.js faylni yuqoridan pastga, qatorma-qator bajardi va ishini tugatdi. Terminal yana buyruq kutadi. Fayl kengaytmasini yozmasangiz ham bo'ladi: node app ham ishlaydi.

Qiziq tajriba: brauzer uchun yozgan script.js ni ham node script.js bilan ishga tushirib ko'ring. Xuddi shu ikki qator chiqadi. Til bir xil — faqat muhit boshqa.

4.2 Avtomatik qayta ishga tushirish: --watch

Har safar faylni o'zgartirib, node app.js ni qayta yozish zerikarli. Node.js buni o'zi qila oladi:

bash
node --watch app.js

Endi app.js ni o'zgartirib saqlasangiz (Ctrl + S), Node uni avtomatik qayta ishga tushiradi. To'xtatish uchun terminalda Ctrl + C ni bosing.

4.3 REPL yoki fayl?

Node.js darsida REPL'ni ko'rgansiz — node deb yozganda ochiladigan > rejimi.

REPL (node) Fayl (node app.js)
Nima uchun Bir qatorni tez sinash Haqiqiy dastur
Kod saqlanadimi Yo'q, chiqqach yo'qoladi Ha, faylda qoladi
Qanday chiqiladi .exit yoki Ctrl + C ikki marta O'zi tugaydi

REPL — brauzer konsolining terminaldagi "egizagi". U ham har buyruqdan keyin natijani, jumladan undefined ni ko'rsatadi. Fayl bilan ishlaganda esa undefined chiqmaydi — faqat console.log yozganlari chiqadi.

Maslahat: Bu kursda kod natijalari "Konsolda:" deb, Node.js ko'rinishida beriladi. Brauzer konsoli ba'zan biroz boshqacha ko'rsatadi: masalan, ranglar yoki belgilar. Ma'nosi bir xil.

Tekshirib ko'ring: app.js da faqat 2 + 2 qatori bor, console.log yo'q. node app.js ni ishga tushirsangiz, terminalda nima chiqadi?

Javob

Hech narsa. Node hisoblaydi, lekin natijani ko'rsatmaydi. Faylda natijani ko'rish uchun console.log(2 + 2) deb yozish kerak. Konsol va REPL natijani o'zi ko'rsatadi, fayl esa yo'q — shu farqni eslab qoling.

5. Ko'p uchraydigan xatolar

5.1 "Sahifada hech narsa chiqmadi"

console.log sahifaga emas, Console paneliga yozadi. Natijani ko'rish uchun F12 → Console'ni oching.

5.2 Fayl nomi yoki yo'lida xato

index.html da src="scipt.js" deb yozdingiz (bitta r tushib qolgan). Sahifa ochiladi, skript esa ishlamaydi. Console'da qizil xato:

text
GET file:///D:/salom-js/scipt.js net::ERR_FILE_NOT_FOUND

Tarjimasi: "scipt.js faylini olishga urindim — fayl topilmadi". Xato qaysi faylni izlaganini ko'rsatadi. Nomni papkadagi fayl nomi bilan harfma-harf solishtiring. Live Server orqali ochgan bo'lsangiz, xabar boshqacha: 404 (Not Found). Ma'nosi bir xil — fayl topilmadi.

5.3 <script> ni yopmaslik

html
<script src="script.js" />
<h1>Salom!</h1>

<img /> kabi "o'zi yopiladigan" yozuv <script> da ishlamaydi. Brauzer <script> ni ochiq deb hisoblaydi va undan keyingi hamma narsani skript matni deb tushunadi. Natijada sarlavha va sahifaning qolgan qismi ko'rinmay qolishi mumkin. To'g'risi — doim yopuvchi teg bilan: <script src="script.js"></script>.

5.4 src bor tegning ichiga kod yozish

html
<script src="script.js">
  console.log("Bu qator hech qachon ishlamaydi");
</script>

src bo'lsa, brauzer faqat tashqi faylni bajaradi. Teg ichidagi kod butunlay e'tiborsiz qoladi — xato ham chiqmaydi. Yo faylga, yo teg ichiga yozing, ikkalasiga birdan emas.

5.5 Node faylni topa olmadi

Terminalda node ap.js deb yozdingiz:

text
Error: Cannot find module 'D:\salom-js\ap.js'
  code: 'MODULE_NOT_FOUND'

Tarjimasi: "ap.js modulini (faylini) topa olmadim". Ikki sabab bo'lishi mumkin:

  • Fayl nomida xato. Nomni tekshiring.
  • Terminal boshqa papkada turibdi. ls (yoki dir) bilan qayerda ekaningizni ko'ring va cd salom-js bilan kerakli papkaga o'ting. Bu buyruqlarni terminal darsida o'rgangansiz.

Xabardagi to'liq yo'lga qarang — Node aynan qaysi faylni izlaganini ko'rasiz.

5.6 REPL ichida node app.js yozish

Siz REPL'ni ochib (> belgisi), unga node app.js deb yozdingiz:

text
Uncaught SyntaxError: Unexpected identifier 'app'

Tarjimasi: "Kutilmagan nom: app". Siz terminalda emas, JavaScript ichidasiz! REPL node so'zini JavaScript'dagi qandaydir nom deb o'yladi. Undan keyin yana bir nom (app) kelishini esa kutmagan edi. Xato ko'rsatilgan so'zdan oldingi so'zga ham qarang. Yechim: .exit bilan REPL'dan chiqing va node app.js ni oddiy terminalda yozing.

Maslahat: Qayerda turganingizni boshlanishdagi belgidan bilasiz. > — REPL (JavaScript yozasiz). PS D:\salom-js> yoki $ — terminal (buyruq yozasiz).

5.7 Modul skript fayldan ochilganda ishlamaydi

index.html ni fayl sifatida ochib (file:///...), <script type="module" src="main.js"> ishlatsangiz, Console'da uzun qizil xato chiqadi. Uning boshi:

text
Access to script at 'file:///D:/salom-js/main.js'
from origin 'null' has been blocked by CORS policy

Tarjimasi: "file:///...main.js skriptiga kirish bloklandi: so'rov manzili yo'q (null) joydan keldi, CORS qoidasi bunga ruxsat bermaydi". Fayl sifatida ochilgan sahifaning sayt manzili (origin) bo'lmaydi — shuning uchun null yozilgan. CORS — brauzerning xavfsizlik qoidasi: sahifa qaysi joylardan fayl olishi mumkinligini belgilaydi. Siz hech narsani buzmadingiz. Brauzer xavfsizlik sababli modullarni faqat server orqali (http://) yuklaydi. Birinchi sahifa darsida ko'rgan Live Server kengaytmasini ishlating: VS Code pastidagi "Go Live" tugmasi. CORS nima ekanini keyinroq batafsil ko'ramiz.

6. Mashqlar

1-mashq (oson): Konsolda tanishuv

Brauzer konsolida console.log(...) bilan uch qator chiqaring: ismingiz, shahringiz va 25 000 so'mlik 3 ta kitob narxi (hisobni JavaScript qilsin).

Ishora: matnni qo'shtirnoq ichiga yozing. Sonni qo'shtirnoqsiz yozing — shunda JavaScript uni hisoblaydi.

Yechim
js
console.log("Ismim: Jasur");
console.log("Shahrim: Samarqand");
console.log(25000 * 3);

Konsolda:

text
Ismim: Jasur
Shahrim: Samarqand
75000

Agar console.log("25000 * 3") deb qo'shtirnoq ichiga yozsangiz, JavaScript hisoblamaydi — shunchaki 25000 * 3 matnini chiqaradi. Qo'shtirnoq ichidagi hamma narsa — oddiy matn.

Brauzer konsolida har buyruqdan keyin undefined ham chiqadi — bu normal.

2-mashq (o'rta): Ikki muhitda bitta fayl

  1. choyxona papkasini yarating, unda index.html va menyu.js bo'lsin.
  2. menyu.js ga uch qator yozing: Choyxona menyusi, Choy — 5000 so'm, Somsa — 8000 so'm.
  3. menyu.js ni index.html ga <head> ichida defer bilan ulang va natijani brauzer konsolida ko'ring.
  4. So'ng terminalda node menyu.js bilan ishga tushiring.
Yechim

menyu.js:

js
console.log("Choyxona menyusi");
console.log("Choy — 5000 so'm");
console.log("Somsa — 8000 so'm");

Konsolda:

text
Choyxona menyusi
Choy — 5000 so'm
Somsa — 8000 so'm

index.html:

html
<!DOCTYPE html>
<html lang="uz">
<head>
  <meta charset="UTF-8">
  <title>Choyxona</title>
  <script defer src="menyu.js"></script>
</head>
<body>
  <h1>Choyxona</h1>
</body>
</html>

Brauzer konsolida ham, terminalda ham bir xil uch qator chiqadi. Matnda apostrof (so'm) bor, shuning uchun qo'shtirnoq "..." ishlatdik.

3-mashq (qiyin): Tartibni toping

index.html:

html
<head>
  <script defer src="a.js"></script>
  <script src="b.js"></script>
</head>
<body>
  <h1>Tartib</h1>
  <script defer>
    console.log("C");
  </script>
</body>

a.js da console.log("A");, b.js da console.log("B"); yozilgan. Konsolda harflar qaysi tartibda chiqadi? Avval o'ylab javob yozing, keyin tekshiring.

Ishora: jadvalni va defer haqidagi ogohlantirishni qayta o'qing. Eslatma: src yo'q skriptda defer ishlamaydi — bunday skript oddiy skript kabi darhol bajariladi.

Yechim
text
B
C
A

Nega:

  1. a.js — defer, shuning uchun HTML oxirigacha o'qilishini kutadi.
  2. b.js — oddiy skript. Brauzer unga yetishi bilan bajaradi: B.
  3. <script defer> ichida kod bor, src yo'q. defer bu yerda ishlamaydi — kod darhol bajariladi: C.
  4. HTML tugadi. Endi kutib turgan a.js bajariladi: A.

Qizig'i: a.js HTML'da birinchi yozilgan, lekin oxirgi bo'lib ishladi.

7. Real ishda

  • Brauzer konsoli — dasturchining kundalik quroli. Saytda nimadir ishlamasa, birinchi qadam — Console'dagi qizil xatolarga qarash.
  • <script type="module"> — zamonaviy loyihalarda standart. Masalan, Vite (tez ishlaydigan loyiha yig'uvchi vosita, kursda alohida o'rganamiz) yaratgan index.html da xuddi shu qator turadi: <script type="module" src="/src/main.js"></script>.
  • node fayl.js — backend'ning asosi. Telegram bot, server, fayllarni qayta nomlaydigan yordamchi dastur — hammasi shunday ishga tushadi. npm darsida ko'rgan npm run buyruqlari ham ichida ko'pincha node ni chaqiradi.
  • Intervyu savoli: "defer va async farqi nima?" Javob: ikkalasi ham sahifani to'xtatmay yuklaydi. defer HTML'dan keyin, tartib bilan bajaradi. async esa yuklanishi bilan, tartibsiz bajaradi.

Xulosa

  • Brauzer konsoli — tez sinash uchun. Undagi undefined — buyruqning o'z natijasi, xato emas.
  • <script>...</script> — sahifa ichida kod; <script src="fayl.js"></script> — alohida fayl (afzal).
  • Oddiy skript sahifa o'qilishini to'xtatadi. defer — HTML'dan keyin, tartib bilan. async — tayyor bo'lishi bilan. type="module" — defer kabi.
  • node app.js — faylni terminalda ishga tushiradi. node --watch — saqlaganda qayta ishga tushiradi.
  • console.log natijasi doim konsolda yoki terminalda chiqadi, sahifada emas.

Keyingi dars: console API: nafaqat console.log — ogohlantirish, xato, jadval, guruh va vaqt o'lchash kabi konsolning boshqa foydali buyruqlarini o'rganamiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
JavaScript'da birinchi dastur: konsol, script tegi va Node.js — IlmHamroh