Node.js va Express

Modullar va npm

Har qanday jiddiy loyiha bir nechta fayldan iborat bo'ladi va tashqi kutubxonalardan foydalanadi. Node.js'da kodni fayllarga bo'lish uchun modullar, tashqi paketlarni o'rnatish uchun esa npm ishlatiladi. Ushbu darsda ikkalasini ham chuqur o'rganamiz.

Modul nima?

Node.js'da har bir fayl โ€” alohida modul. Bir faylning o'zgaruvchi va funksiyalari boshqa faylga avtomatik ko'rinmaydi. Ularni almashish uchun modul kerakli narsalarni eksport qiladi, boshqa modul esa ularni import qiladi.

Node.js ikki xil modul tizimini qo'llab-quvvatlaydi: eski, an'anaviy CommonJS va zamonaviy standart ESM (ES Modules).

CommonJS: require va module.exports

CommonJS โ€” Node.js'ning an'anaviy modul tizimi. Uzoq yillar davomida standart bo'lgan va hozir ham juda keng tarqalgan. Unda eksport uchun module.exports, import uchun require() ishlatiladi.

Bir modulda funksiyani eksport qilaylik:

// math.js
function qoshish(a, b) {
  return a + b;
}

function ayirish(a, b) {
  return a - b;
}

module.exports = { qoshish, ayirish };

Boshqa faylda uni import qilamiz:

// app.js
const math = require('./math.js');

console.log(math.qoshish(2, 3)); // 5
console.log(math.ayirish(5, 1)); // 4

// Yoki destrukturizatsiya bilan:
const { qoshish } = require('./math.js');
console.log(qoshish(10, 20)); // 30

Diqqat qiling: o'z fayllaringizni import qilishda nisbiy yo'l beriladi โ€” './math.js'. Bu yerda ./ joriy papkani bildiradi.

module.exportsga istalgan narsani berish mumkin: obyekt, funksiya, class, hatto sonni ham. Ko'pincha obyekt (bir nechta narsani eksport qilish uchun) ishlatiladi. Bitta narsani eksport qilsangiz โ€” masalan, bitta funksiyani โ€” module.exports = qoshish deb yozasiz.

ESM: import va export

ESM (ES Modules) โ€” bu JavaScript'ning rasmiy, standart modul tizimi. Siz uni brauzerdagi modullardan tanigansiz. U import va export kalit so'zlaridan foydalanadi.

// math.mjs
export function qoshish(a, b) {
  return a + b;
}

export function ayirish(a, b) {
  return a - b;
}
// app.mjs
import { qoshish, ayirish } from './math.mjs';

console.log(qoshish(2, 3)); // 5

Node.js'da ESM'ni ishlatishning ikki yo'li bor:

CommonJS va ESM'ni bir faylda aralashtirib bo'lmaydi. Ya'ni bir faylda ham require, ham import yozib bo'lmaydi. Loyihada bittasini tanlab, izchil ishlating. Yangi loyihalar uchun ESM tavsiya etiladi, lekin ko'plab eski loyihalar va o'quv materiallari hali ham CommonJS'da.

O'rnatilgan (built-in) modullar

Node.js o'zi bilan birga ko'plab foydali modullarni olib keladi โ€” ularni o'rnatish shart emas, faqat import qilish kifoya. Ular o'rnatilgan modullar (built-in / core modules) deyiladi:

// O'rnatilgan modulni import qilish (yo'lsiz, faqat nom):
const os = require('os');

console.log(os.platform()); // 'linux'
console.log(os.cpus().length); // protsessor yadrolari soni
O'rnatilgan modullarni import qilganda nom oldiga ./ qo'yilmaydi. require('os') โ€” o'rnatilgan modul, require('./os') โ€” sizning os.js faylingiz. Ba'zi zamonaviy modullar node: prefiksi bilan ham yoziladi: require('node:fs').

npm nima?

npm (Node Package Manager) โ€” bu Node.js bilan birga keladigan paketlar menejeri. U tashqi kutubxonalarni (paketlarni) o'rnatish, yangilash va boshqarishga imkon beradi.

Dunyodagi eng katta ochiq kod omborlaridan biri โ€” npmjs.com. U yerda millionlab tayyor paketlar bor: veb-freymvorklar, sana bilan ishlash, ma'lumotlar bazasi drayverlari va hokazo. Ularni bir buyruq bilan loyihangizga qo'shasiz.

package.json va npm init

Har bir Node.js loyihasining markazida package.json fayli turadi. U loyiha haqidagi ma'lumot (nomi, versiyasi, bog'liqliklari, skriptlari)ni saqlaydi. Uni yaratish uchun:

npm init
# yoki barcha savollarni o'tkazib, standart qiymatlar bilan:
npm init -y

Natijada shunday fayl paydo bo'ladi:

{
  "name": "mening-loyiham",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {},
  "devDependencies": {}
}

scripts bo'limi juda foydali โ€” u yerda buyruqlarga qisqa nom berishingiz mumkin. Masalan, npm start yozganingizda node index.js ishga tushadi. O'zingizning skriptlaringizni npm run <nom> orqali chaqirasiz.

npm install va node_modules

Tashqi paketni o'rnatish uchun npm install (yoki qisqacha npm i) ishlatiladi. Masalan, mashhur express freymvorkini o'rnataylik:

npm install express

Bu buyruq uch ish qiladi:

  1. Paketni node_modules papkasiga yuklab oladi;
  2. Uni package.jsonning dependencies bo'limiga qo'shadi;
  3. package-lock.json faylini yangilaydi (aniq versiyalarni qayd etadi).

Endi paketni koddan foydalanish mumkin:

const express = require('express');
const app = express();
node_modules papkasi juda katta bo'lishi mumkin (yuzlab megabayt). Uni git'ga joylamang โ€” .gitignore fayliga node_modules/ qatorini qo'shing. Loyihani boshqa joyda ochganda npm install buyrug'i package.json asosida barcha paketlarni qayta yuklab oladi.

dependencies va devDependencies

package.jsonda bog'liqliklar ikki turga bo'linadi:

# Oddiy bog'liqlik (dependencies):
npm install express

# Faqat ishlab chiqish uchun (devDependencies):
npm install --save-dev nodemon
# yoki qisqacha:
npm install -D nodemon

Ishlab chiqarish (production) serverida faqat dependencies o'rnatiladi, devDependencies esa o'tkazib yuboriladi โ€” bu serverni yengil qiladi. Buning uchun npm install --production ishlatiladi.

nodemon โ€” foydali dev vositasi: u faylni har o'zgartirganingizda serverni avtomatik qayta ishga tushiradi. Shuning uchun u devDependencies'ga qo'yiladi โ€” u yakuniy ilovaga kerak emas, faqat dasturchiga qulaylik uchun.

npx

npx โ€” npm bilan birga keladigan yana bir vosita. U paketni o'rnatmasdan, bir marta ishga tushirishga imkon beradi. Bu ayniqsa CLI vositalarini sinab ko'rish uchun qulay.

# create-react-app'ni o'rnatmasdan ishga tushirish:
npx create-react-app mening-ilovam

# lokal o'rnatilgan paketni ishga tushirish:
npx eslint .

npx paketni vaqtincha yuklab oladi, ishga tushiradi va tugagach o'chiradi. Shuning uchun global o'rnatishlar bilan tizimni to'ldirmaslik uchun juda foydali.

Xulosa