Node.js process: argument va muhit
Shu paytgacha yozgan skriptlaringiz har safar bir xil ish qildi: fayl
nomi kodda qattiq yozilgan edi. Haqiqiy vositalar boshqacha ishlaydi —
node app.js users.json deb chaqirasiz va dastur aynan shu faylni
oladi. Terminaldan uzatilgan qiymatni process obyekti yetkazadi.
process nima
console.log("Node versiyasi:", process.version);
console.log("Platforma:", process.platform);
Node versiyasi: v22.11.0
Platforma: win32
platform qiymati Windows’da win32, macOS’da darwin, Linux’da
linux bo’ladi.
process.argv — terminaldan kelgan qiymatlar
args.js faylini yarating:
console.log(process.argv);
Avval argumentsiz ishga tushiring:
node args.js
[
'C:\\Program Files\\nodejs\\node.exe',
'D:\\node-start\\args.js'
]
Massivda ikkita element bor, garchi hech narsa yozmagan bo’lsangiz ham. Endi argument qo’shing:
node args.js add "Non sotib olish" --priority 2
[
'C:\\Program Files\\nodejs\\node.exe',
'D:\\node-start\\args.js',
'add',
'Non sotib olish',
'--priority',
'2'
]
Indeks 0 va 1 nima
Birinchi ikki element har doim o’zgarmas:
| Indeks | Nima turadi |
|---|---|
0 |
node dasturining to’liq yo’li |
1 |
Ishga tushirilgan skriptning to’liq yo’li |
2 va keyingilari |
Siz yozgan argumentlar |
Shuning uchun haqiqiy argumentlar ikkinchi indeksdan boshlanadi:
const args = process.argv.slice(2);
console.log("Argumentlar:", args);
console.log("Soni:", args.length);
node args.js add "Non sotib olish"
Argumentlar: [ 'add', 'Non sotib olish' ]
Soni: 2
slice(2) — bu yozuvni Node.js kodida doim uchratasiz.
Argumentlarni ishlatish
Fayl nomini argumentdan oladigan skript yozamiz. read-file.js:
const fs = require("fs");
const path = require("path");
const args = process.argv.slice(2);
const fileName = args[0];
if (!fileName) {
console.log("Fayl nomini yozing: node read-file.js <fayl>");
process.exit(1);
}
const filePath = path.join(__dirname, fileName);
if (!fs.existsSync(filePath)) {
console.log("Fayl topilmadi:", fileName);
process.exit(1);
}
const content = fs.readFileSync(filePath, "utf8");
console.log(`--- ${fileName} ---`);
console.log(content);
Argumentsiz:
node read-file.js
Fayl nomini yozing: node read-file.js <fayl>
fs darsida yaratgan notes.txt bilan:
node read-file.js notes.txt
--- notes.txt ---
Birinchi qator
Ikkinchi qator
Yo’l path darsidagi qoida bo’yicha
path.join(__dirname, ...) bilan yig’ildi.
Argument har doim matn
Terminaldan kelgan qiymat har doim satr bo’ladi — raqam yozsangiz ham:
const args = process.argv.slice(2);
const count = args[0];
console.log("Qiymat:", count);
console.log("Turi:", typeof count);
console.log("Qo'shsak:", count + 1);
console.log("Songa aylantirsak:", Number(count) + 1);
node args.js 5
Qiymat: 5
Turi: string
Qo'shsak: 51
Songa aylantirsak: 6
count + 1 natijasi 51 chiqdi — satr bilan son qo’shilganda
JavaScript ularni ulaydi. Hisob kerak bo’lsa Number() orqali
aylantiring.
process.exit va chiqish kodlari
process.exit(kod) dasturni darhol to’xtatadi.
| Kod | Ma’nosi |
|---|---|
0 |
Muvaffaqiyatli tugadi |
1 |
Umumiy xato |
Tekshirish usuli terminalga bog’liq. PowerShell’da:
node read-file.js
echo $LASTEXITCODE
Fayl nomini yozing: node read-file.js <fayl>
1
macOS va Linux terminalida:
node read-file.js
echo $?
Fayl nomini yozing: node read-file.js <fayl>
1
process.env — muhit o’zgaruvchilari
console.log("PORT:", process.env.PORT);
console.log("Turi:", typeof process.env.PORT);
node env-demo.js
PORT: undefined
Turi: undefined
O’zgaruvchi berilmagani uchun undefined. Endi qiymat bilan
tushiramiz. PowerShell’da:
$env:PORT=4000; node env-demo.js
macOS va Linux’da:
PORT=4000 node env-demo.js
PORT: 4000
Turi: string
Bu yerda ham qiymat satr bo’lib keldi.
Amalda standart qiymat bilan yoziladi:
// Berilmasa 3000 ishlatiladi
const port = Number(process.env.PORT) || 3000;
console.log("Server porti:", port);
Server porti: 3000
.env fayli
Har safar terminalda yozish noqulay. Sozlamalar .env fayliga
yig’iladi.
Loyihada .env fayli yarating:
PORT=4000
APP_NAME=Test dastur
Node.js uni --env-file bayrog’i bilan o’qiydi:
// env-demo.js
console.log("Port:", process.env.PORT);
console.log("Nomi:", process.env.APP_NAME);
node --env-file=.env env-demo.js
Port: 4000
Nomi: Test dastur
cwd va __dirname farqi
Ikki tushuncha chalkashadi, lekin farq aniq:
const path = require("path");
console.log("cwd: ", process.cwd());
console.log("__dirname:", __dirname);
node-start papkasidan ishga tushirsangiz:
node paths-demo.js
cwd: D:\node-start
__dirname: D:\node-start
Endi bir papka yuqoridan:
cd ..
node node-start/paths-demo.js
cwd: D:\
__dirname: D:\node-start
| Nima | Qiymati | O’zgaradimi |
|---|---|---|
process.cwd() |
Terminal turgan papka | Ha — qayerdan chaqirilsa |
__dirname |
Fayl turgan papka | Yo’q |
Qoida: dastur o’z fayllarini o’qiyotgan bo’lsa __dirname,
foydalanuvchi turgan papkadagi faylni olayotgan bo’lsa process.cwd().
Amaliy mashq
node-start papkasida bajaring:
process.argvni to’liq chiqaradigan skript yozib, uni avval argumentsiz, keyin uchta argument bilan ishga tushiring;slice(2)qo’shib faqat o’z argumentlaringizni ajrating;- Bo’shliqli matnni avval qo’shtirnoqsiz, keyin qo’shtirnoq bilan uzating va massivdagi farqni ko’ring;
- Argument sifatida son yuborib,
typeofbilan turini tekshiring vaNumber()bilan aylantirib qo’shing; read-file.jsni yozib, mavjud bo’lmagan fayl nomi bilan chaqiring hamda chiqish kodini terminalda tekshiring;.envfayli yaratib,node --env-file=.envbilan ishga tushiring va.envni.gitignorega qo’shing.
4-qadam eng ko’p vaqt yo’qotadigan xatoni oldini oladi: argument son ko’rinsa ham, u satr bo’lib keladi.
Qisqacha xulosa
process— global obyekt,requireqilinmaydi.process.argvda 0-indeksnodeyo’li, 1-indeks skript yo’li — o’z argumentlaringizslice(2)bilan olinadi.- Terminaldan kelgan har qiymat satr: hisob uchun
Number()kerak. process.exit(1)xato bilan to’xtatadi,0muvaffaqiyatni bildiradi.process.envmuhit sozlamalarini beradi,--env-filebayrog’i.envfaylini o’qiydi..envhech qachon git’ga qo’shilmaydi — ichida parol turadi.process.cwd()terminal papkasini,__dirnamefayl papkasini beradi.
Keyingi darsda asinxron kod — callback,
Promise va async/await Node.js kontekstida.