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:
- Fayl kengaytmasini
.mjsqilib qo'yish; package.jsonga"type": "module"qatorini qo'shish (u holda oddiy.jsfayllar ham ESM sifatida ishlaydi).
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:
fsโ fayl tizimi bilan ishlash;pathโ fayl yo'llari bilan ishlash;httpโ HTTP server va so'rovlar;osโ operatsion tizim haqida ma'lumot;cryptoโ shifrlash va xeshlash;urlโ URL manzillarni tahlil qilish.
// 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
./ 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:
- Paketni node_modules papkasiga yuklab oladi;
- Uni
package.jsonningdependenciesbo'limiga qo'shadi; package-lock.jsonfaylini 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:
- dependencies โ ilova ishlashi uchun kerak bo'lgan paketlar (masalan,
express); - devDependencies โ faqat ishlab chiqish (development) paytida kerak bo'lgan paketlar (masalan, test vositalari, kod tekshirgichlari).
# 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
- Node.js'da har bir fayl โ modul; ular CommonJS (
require/module.exports) yoki ESM (import/export) bilan bog'lanadi; - O'rnatilgan modullar (
fs,path,http...) o'rnatishsiz mavjud; - npm โ tashqi paketlarni boshqaruvchi menejer;
npm initloyihani,package.jsonuning ma'lumotini saqlaydi; npm installpaketninode_modulesga yuklaydi; git'ganode_modulesjoylanmaydi;- dependencies โ ilova uchun, devDependencies โ ishlab chiqish uchun;
- npx โ paketni o'rnatmasdan ishga tushiradi.