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:

  1. process.argv ni to’liq chiqaradigan skript yozib, uni avval argumentsiz, keyin uchta argument bilan ishga tushiring;
  2. slice(2) qo’shib faqat o’z argumentlaringizni ajrating;
  3. Bo’shliqli matnni avval qo’shtirnoqsiz, keyin qo’shtirnoq bilan uzating va massivdagi farqni ko’ring;
  4. Argument sifatida son yuborib, typeof bilan turini tekshiring va Number() bilan aylantirib qo’shing;
  5. read-file.js ni yozib, mavjud bo’lmagan fayl nomi bilan chaqiring hamda chiqish kodini terminalda tekshiring;
  6. .env fayli yaratib, node --env-file=.env bilan ishga tushiring va .env ni .gitignore ga 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, require qilinmaydi.
  • process.argv da 0-indeks node yo’li, 1-indeks skript yo’li — o’z argumentlaringiz slice(2) bilan olinadi.
  • Terminaldan kelgan har qiymat satr: hisob uchun Number() kerak.
  • process.exit(1) xato bilan to’xtatadi, 0 muvaffaqiyatni bildiradi.
  • process.env muhit sozlamalarini beradi, --env-file bayrog’i .env faylini o’qiydi.
  • .env hech qachon git’ga qo’shilmaydi — ichida parol turadi.
  • process.cwd() terminal papkasini, __dirname fayl papkasini beradi.

Keyingi darsda asinxron kod — callback, Promise va async/await Node.js kontekstida.

Bu dars foydali bo'ldimi?

marta ko'rildi