Node.js runtime muhiti, brauzer bilan farqlari (DOM yo'qligi, fs moduli, global), CommonJS (require, module.exports) va ES Modules solishtirmasi hamda process obyekti.
PART 8 (Tooling & Ecosystem) boshlanadi. Shu paytgacha biz JavaScript'ni asosan brauzer kontekstida o'rgandik. Bu bobda JavaScript'ni brauzerdan tashqarida ishlatish imkonini beruvchi Node.jsni o'rganamiz.
Node.js — JavaScript kodini brauzerdan tashqarida, to'g'ridan-to'g'ri kompyuterda (yoki serverda) ishga tushirish imkonini beruvchi muhit (runtime environment).
Uzoq vaqt, JavaScript faqat brauzerda ishlay olardi. Node.js — Google Chrome'ning V8 JavaScript engine'idan foydalanib, JavaScript'ni server tomonida, fayl tizimi bilan ishlashda, va umuman brauzerdan tashqari har qanday dasturlashda ishlatish imkonini ochdi.
🌐 Brauzer JavaScript'i — bu faqat "ko'rgazma zali"da ishlaydigan mutaxassis (u faqat sahifa, foydalanuvchi interfeysi bilan ishlaydi). Node.js esa — o'sha mutaxassisga "omborxona", "hisobxona" (fayl tizimi, server) kabi joylarda ham ishlash imkonini beradi.
| Xususiyat | Brauzer | Node.js |
|---|---|---|
window, document | ✅ Mavjud | ❌ Mavjud emas (DOM yo'q) |
| Fayl tizimiga kirish | ❌ Yo'q (xavfsizlik) | ✅ fs moduli orqali |
| Modul tizimi | ES Modules (Chapter 38) | CommonJS va ES Modules |
| Global obyekt | window | global |
⚠️ Common Mistake
Node.js muhitida Chapter 31-37'da o'rgangan document.querySelector(), localStorage kabi DOM/brauzer API'larini ishlatishga urinish — xatolik beradi, chunki Node.js'da DOM umuman mavjud emas. Bu — server tomonida ishlaydigan kod ekanini har doim yodda tutish kerak.
fs (File System) — Node.js'ning fayllar bilan o'qish/yozish uchun ishlatiladigan asosiy o'rnatilgan (built-in) moduli.
script.jsJavaScriptconst fs = require("fs");fs.readFile("data.txt", "utf8", function (error, content) {if (error) {console.log("Xatolik: " + error.message);return;}console.log(content);});
Bu — Chapter 26'da o'rgangan Error-First Callback naqshining haqiqiy, Node.js'dagi qo'llanilishi: readFilening callback'i birinchi argument sifatida errorni, ikkinchisida natijani qabul qiladi.
script.jsJavaScriptconst fs = require("fs/promises");async function readData() {try {let content = await fs.readFile("data.txt", "utf8");console.log(content);} catch (error) {console.log("Xatolik: " + error.message);}}readData();
🔗 Connection
Bu — Chapter 28'da o'rgangan async/awaitning, Chapter 26'dagi eski callback uslubidan qanchalik "toza" ekanini yana bir bor ko'rsatadigan misol.
Chapter 38'da ES Modullarni (import/export) o'rgangan edik. Node.js'ning eski, an'anaviy modul tizimi — CommonJS, u require()/module.exports orqali ishlaydi.
script.jsJavaScript// mathUtils.js (CommonJS)function add(a, b) {return a + b;}module.exports = { add };
script.jsJavaScript// main.js (CommonJS)const { add } = require("./mathUtils.js");console.log(add(2, 3)); // 5
| Xususiyat | CommonJS | ES Modules |
|---|---|---|
| Eksport | module.exports = ... | export ... |
| Import | const x = require(...) | import x from ... |
| Yuklash | Sinxron | Asinxron (statik tahlil) |
| Fayl kengaytmasi | .js (standart) | .mjs yoki package.jsonda "type": "module" |
💡 Key Idea
Zamonaviy Node.js loyihalari — ko'pincha ES Modules'ga o'tmoqda, lekin ko'plab eski kutubxonalar va loyihalar hali ham CommonJS'da yozilgan, shuning uchun ikkalasini ham tanish muhim.
Chapter 29'da brauzerning Event Loop mexanizmini o'rgandik. Node.js — xuddi shu asosiy tamoyilga ega (bitta oqim, asinxron amallar), lekin uning ichida qo'shimcha bosqichlar (masalan, fayl operatsiyalari, tarmoq so'rovlari uchun) mavjud, chunki Node.js — brauzerdan farqli, ko'plab operatsion tizim darajasidagi amallar (fayl, tarmoq) bilan ishlaydi.
script.jsJavaScriptconsole.log("1");setTimeout(() => console.log("2"), 0);fs.readFile("file.txt", () => console.log("3 (fayl o'qildi)"));console.log("4");
Natija odatda:
code.textTEXT142 yoki 3 (tartib holatga qarab farq qilishi mumkin)
Sinxron kod ("1", "4") — har doim birinchi bo'lib bajariladi, bu — Chapter 29'da o'rgangan asosiy qoida bilan bir xil. Asinxron amallar orasidagi aniq tartib esa, Node.js'ning ichki, ko'proq murakkab navbat tizimiga bog'liq bo'lishi mumkin.
🔗 Connection
Chapter 29'da o'rgangan Call Stack, Microtask/Macrotask tushunchalari — Node.js'da ham asosiy tamoyil sifatida amal qiladi, faqat qo'shimcha "I/O" (Input/Output — fayl, tarmoq) bosqichlari qo'shiladi.
process — Node.js dasturi haqida ma'lumot beruvchi va uni boshqarish imkonini beruvchi global obyekt.
script.jsJavaScriptconsole.log(process.argv); // komandalar qatori argumentlariconsole.log(process.env.NODE_ENV); // atrof-muhit o'zgaruvchisiconsole.log(process.version); // Node.js versiyasiprocess.exit(0); // dasturni to'xtatish
Task:
Node.js muhitida (agar mavjud bo'lsa) process.versionni konsolga chiqaring.
Required Concepts:
process objectconsole.log(process.version);Task:
CommonJS formatida, stringUtils.js faylida capitalize(str) functionini yozing va module.exports orqali eksport qiling. Boshqa faylda require() bilan import qilib ishlating.
Required Concepts:
require/module.exportsTask:
fs/promises yordamida, async/await bilan, mavjud faylni o'qib, uning mazmunini katta harflarga o'tkazib, yangi faylga yozadigan function yozing (fs.writeFile ishlatiladi). Xatolarni try/catch bilan boshqaring.
Required Concepts:
fs/promises, async/await, try/catchawait fs.readFile(...), keyin await fs.writeFile(...).script.jsJavaScriptconsole.log("Boshlanishi");setTimeout(() => console.log("Timeout"), 0);Promise.resolve().then(() => console.log("Promise"));console.log("Oxiri");
Bu — Node.js'da ishga tushirilsa, natija qanday bo'ladi?
🧠 Think first! Javobni ko'rishdan oldin kamida 30 soniya o'ylang.
<details> <summary>Answer</summary> Boshlanishi Oxiri Promise TimeoutWhy?
Bu — Chapter 29'da o'rgangan Microtask/Macrotask tartibi bilan bir xil: sinxron kod avval, keyin Microtask (Promise), keyin Macrotask (setTimeout). Node.js — brauzer bilan bir xil asosiy Event Loop tamoyiliga amal qiladi.
Quyidagi kodda muammo bor:
script.jsJavaScriptconst fs = require("fs");let content = fs.readFile("data.txt", "utf8", function (err, data) {return data;});console.log(content); // dasturchi fayl mazmunini kutgan, lekin undefined chiqadi
Your Task:
Yechim:
</details>script.jsJavaScriptconst fs = require("fs");fs.readFile("data.txt", "utf8", function (err, data) {if (err) {console.log("Xatolik: " + err.message);return;}console.log(data); // natija SHU YERDA ishlatilishi kerak});
fs) va boshqa server imkoniyatlari mavjud.require/module.exports) — Node.js'ning an'anaviy modul tizimi.process — dastur haqida ma'lumot va uni boshqarish uchun global obyekt.require/module.exports (CommonJS) va import/export (ES Modules) — ikkala tizimni ham bilish foydali.fs/promises — zamonaviy, async/await bilan mos fayl operatsiyalari uchun tavsiya etiladi.script.jsJavaScript// CommonJSconst fs = require("fs");module.exports = { myFunction };// fs/promisesconst fs = require("fs/promises");let data = await fs.readFile("file.txt", "utf8");await fs.writeFile("file.txt", "yangi mazmun");// processprocess.argv;process.env;process.exit(0);
Mavzu bo‘yicha tushunchalaringizni interaktiv test orqali sinovdan o‘tkazing va natijalarni bilib oling.
Darslikda o‘rganilgan qoidalarga asosan real kod yozing, testlardan o‘tkazing va yechimlarni mustahkamlang.
Test Sinovi
Hali topshirilmagan (kamida 75% kerak)
Amaliy Masalalar
0 / 3 ta yechildi (kamida 75% kerak)
Dars sifati va mazmunini yaxshilash uchun o‘z haqqoniy bahoingizni qoldiring.
Mavzuni to‘liq o‘zlashtirish uchun test sinovi, amaliy kodlash va bog‘liq darslar
O‘z bilimingizni interaktiv test savollari orqali tekshiring va darhol xatolarni tahlil qiling.
Nazariyani real kod yozish bilan mustahkamlang, avtomatik testlardan o‘ting va XP to‘plang.
Kurs bo‘yicha keyingi va bog‘liq mavzular: