CommonJS — require, module.exports
Muammodan boshlaylik
Node.js loyihalarida va eski JavaScript kodlarda ko'pincha bunday yozuv ko'rasiz:
const express = require("express");
const fs = require("fs");
const utils = require("./utils");
module.exports = { funksiya, konstantа };
Bu ES Modullar (import/export) emas — bu CommonJS. Node.js ning dastlabki modul tizimi.
Ko'plab kutubxonalar, server kod, eski loyihalar hali CommonJS ishlatadi. Buni o'qiy va yoza olish kerak.
CommonJS qanday paydo bo'ldi?
ES Modullar 2015 yilda standartga kiritildi. Lekin Node.js 2009 yilda chiqdi — o'sha paytda standart modul tizimi yo'q edi.
Node.js o'z modul tizimini yaratdi — CommonJS. Yillar o'tib u standartga aylandi, juda ko'p kutubxona shu tizimda yozildi. Hozir ham keng tarqalgan.
require — modul yuklash
require() — modul yuklash funksiyasi. Sinxron ishlaydi — fayl o'qilguncha kutiladi.
// O'rnatilgan modullar (Node.js built-in)
const fs = require("fs");
const path = require("path");
const http = require("http");
// NPM dan o'rnatilgan kutubxona
const express = require("express");
// O'z faylingiz
const utils = require("./utils"); // ← ./utils.js
const konfiguratsiya = require("./config/database"); // ← ./config/database.js
Hayotiy o'xshatma
Kutubxona. require — kutubxonachiga "menga bu kitob kerak" deyish. Kutubxonachi borib, topib, beradi. Siz kitob qo'lingizda bo'lguncha kutasiz — sinxron.
module.exports — nima eksport qilish
module.exports — bu fayldan tashqariga chiqariladigan narsa. Xohlagan narsani qo'yish mumkin: funksiya, ob'ekt, sinf, qiymat.
Ob'ekt eksport:
// utils.js
function qosh(a, b) { return a + b; }
function ayir(a, b) { return a - b; }
const VERSION = "1.0";
module.exports = {
qosh,
ayir,
VERSION,
};
// boshqa fayl
const utils = require("./utils");
console.log(utils.qosh(2, 3)); // 5
console.log(utils.VERSION); // "1.0"
// yoki destructuring
const { qosh, VERSION } = require("./utils");
Bitta funksiya eksport:
// formatlash.js
module.exports = function(sana) {
return sana.toLocaleDateString("uz-UZ");
};
const formatlash = require("./formatlash");
console.log(formatlash(new Date())); // "17.06.2026"
Sinf eksport:
// Foydalanuvchi.js
class Foydalanuvchi {
constructor(ism, email) {
this.ism = ism;
this.email = email;
}
}
module.exports = Foydalanuvchi;
const Foydalanuvchi = require("./Foydalanuvchi");
const f = new Foydalanuvchi("Jasur", "jasur@mail.com");
exports — qisqa yozuv
module.exports o'rniga faqat exports ham yozish mumkin — lekin cheklov bor:
// ✅ — exports orqali xususiyat qo'shish
exports.qosh = function(a, b) { return a + b; };
exports.ayir = function(a, b) { return a - b; };
// ❌ — exports ni to'liq almashtirish ishlamaydi
exports = { qosh, ayir }; // module.exports o'zgarmadi!
// ✅ — to'liq almashtirish uchun module.exports
module.exports = { qosh, ayir };
Nima uchun exports = {...} ishlamaydi?
exports — module.exports ga havola (reference). exports = {...} deyilganda — yangi ob'ekt yaratiladi, lekin module.exports o'zgarmaydi. require esa module.exports ni qaytaradi, exports ni emas.
Kesh — bir marta yuklanadi
require — bir marta yuklaydi, keyin keshdan qaytaradi. Bitta modul turli joylarda require qilinsa — bir xil ob'ekt:
// a.js
const utils = require("./utils");
// b.js
const utils = require("./utils");
// Ikkala utils — bir xil ob'ekt, keshdan
Bu — singleton pattern avtomatik. Modul ichidagi holat bitta.
Tez-tez uchraydigan xatolar
exports ni to'liq almashtirish:
// ❌ — bu module.exports ni o'zgartirmaydi
exports = { funksiya };
// ✅
module.exports = { funksiya };
.js kengaytmasiz import — ishlaydi, lekin aniqlik uchun:
// Ishlaydi — Node.js .js qo'shib topadi
const utils = require("./utils");
// Aniqroq
const utils = require("./utils.js");
require ni asinxron funksiya ichida chaqirish:
CommonJS sinxron — require faylni o'qish tugamaguncha kutadi. Bu Event Loop ni to'sishi mumkin. Katta fayllar yoki dinamik yuklash kerak bo'lsa — require ni module darajasida chaqirish yaxshiroq.
Xulosa
CommonJS — Node.js ning modul tizimi. Eski va hozir ham keng tarqalgan.
require("./fayl") — modul yuklash. Sinxron.
module.exports = { ... } — nima eksport qilish. exports.x = ... — qisqa, lekin exports = {...} ishlamaydi.
ES Modullar (import/export) va CommonJS (require/module.exports) — bir xil maqsad, boshqacha sintaksis. Keyingi darsda farqlarini ko'ramiz.
Keyingi dars
57-dars: ES Modullar va CommonJS farqi