2-bo‘lim
O'rnatish va birinchi loyiha
Node ni o'rnatish, LTS versiyalar, REPL, package.json yaratish, npm skriptlari, --watch va --env-file bayroqlari.
Ushbu bo‘lim mundarijasi
Node ni o'rnatish oson, lekin bir nechta yo'l bor va ularning farqini bilish kerak.
O'rnatish #
| Usul | Kimga |
|---|---|
nodejs.org dan o'rnatuvchi | Boshlovchilar |
nvm yoki fnm | Bir nechta versiya kerak bo'lsa |
brew, apt, winget | Tizim paket menejerini afzal ko'rsangiz |
Boshlash uchun rasmiy saytdan LTS versiyasini oling.
Node ikki yo'nalishda chiqadi:
- LTS (Long Term Support) - juft raqamli versiyalar: 20, 22,
- Ular uch yilga yaqin qo'llab-quvvatlanadi va xatolari
tuzatiladi.
- Current - toq raqamlilar: 21, 23, 25. Ularda eng yangi imkoniyatlar bo'ladi, lekin qo'llab-quvvatlash muddati qisqa.
Ishlab chiqarish uchun har doim LTS. Bu darslikdagi misollar Node 24 da tekshirilgan, lekin deyarli hammasi Node 18 dan boshlab ishlaydi.
Tekshirish #
node --version
npm --version
Ikkalasi ham versiya qaytarsa, hammasi joyida. npm Node bilan
birga keladi - uni alohida o'rnatish kerak emas.
REPL #
Buyruq qatorida shunchaki node deb yozsangiz, interaktiv muhit
ochiladi:
node
Unda kod yozib, natijani darhol ko'rish mumkin. Chiqish uchun ikki
marta Ctrl+C yoki .exit.
REPL kichik narsani tez sinash uchun qulay, lekin haqiqiy ish fayl bilan qilinadi.
Loyiha yaratish #
mkdir mening-loyiham
cd mening-loyiham
npm init -y
npm init -y hamma savolga "ha" deb javob beradi va package.json
faylini yaratadi:
{
"name": "mening-loyiham",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
}
}
Bu fayl - loyihaning pasporti. Unda nomi, versiyasi, bog'liqliklari va buyruqlari yoziladi.
type: module #
Bu darslikdagi eng muhim sozlama:
{
"name": "mening-loyiham",
"version": "1.0.0",
"type": "module",
"main": "index.js"
}
"type": "module" qo'shsangiz, .js fayllarida import yozish
mumkin bo'ladi.
Usiz Node .js ni eski uslubda - require bilan o'qiydi. Ikki
uslubning farqini keyingi bo'limda to'liq ko'ramiz.
"type": "module" yozmasdan import ishlatsangiz, Node shunday
deydi:
SyntaxError: Cannot use import statement outside a module
Xato matni chalkash, chunki u faylda emas, package.json da. Shu
xabarni ko'rsangiz, birinchi bo'lib package.json ni tekshiring.
Yangi loyihada uni darhol qo'shing.
Dasturni ishga tushirish #
node index.js
node .
Ikkinchi shakl package.json dagi main maydoniga qaraydi.
const vazifalar = ["o'qish", "yozish", "sinash"];
for (const [i, vazifa] of vazifalar.entries()) {
console.log(`${i + 1}. ${vazifa}`);
}
console.log("Jami:", vazifalar.length);
1. o'qish
2. yozish
3. sinash
Jami: 3
npm skriptlari #
package.json ichidagi scripts - loyihaning buyruqlari:
{
"type": "module",
"scripts": {
"start": "node index.js",
"dev": "node --watch index.js",
"test": "node --test"
}
}
Ularni shunday chaqirasiz:
npm start
npm run dev
npm test
start, test, stop va restart - maxsus nomlar, ularni run
siz chaqirish mumkin.
Qolgan hamma nom uchun npm run <nom> yozish kerak: npm run dev,
npm run build.
Skriptlar ichida node_modules/.bin avtomatik PATH ga qo'shiladi.
Shuning uchun "dev": "vite" deb yozsangiz, u ishlaydi - garchi
vite global o'rnatilmagan bo'lsa ham.
--watch bayrog'i #
node --watch index.js
Fayl o'zgarganda Node dasturni avtomatik qayta ishga tushiradi.
Ilgari buning uchun nodemon paketi o'rnatilardi. Node 18 dan
beri bu imkoniyat tilning o'zida bor va qo'shimcha paket kerak emas.
Muhit o'zgaruvchilari #
Maxfiy ma'lumot - parol, API kalit - hech qachon kodga yozilmaydi. Uning o'rni - muhit o'zgaruvchilari.
const port = process.env.PORT ?? "3000";
const muhit = process.env.NODE_ENV ?? "development";
console.log("Port:", port);
console.log("Muhit:", muhit);
console.log("Ishlab chiqarishdami:", muhit === "production");
Port: 3000
Muhit: development
Ishlab chiqarishdami: false
?? - nullish operatori: chap tomon undefined yoki null
bo'lsa, o'ngdagini beradi.
Qiymatni tashqaridan berish mumkin:
PORT=8080 node index.js
.env fayli #
Ko'p o'zgaruvchi bo'lsa, ularni faylga yozish qulay:
PORT=8080
NODE_ENV=development
DB_PAROL=maxfiy
Node 20 dan beri uni o'qish uchun paket kerak emas:
node --env-file=.env index.js
.env faylida parollar va kalitlar bo'ladi. U omborga tushsa,
maxfiy ma'lumot butun dunyoga ochiladi - va git tarixidan uni
o'chirish juda qiyin.
Shuning uchun .gitignore faylini darhol yarating:
node_modules/
.env
Jamoadoshlaringiz uchun .env.example faylini qo'shing: unda
o'zgaruvchilar nomi bo'ladi, qiymatlari esa bo'sh.
node_modules #
npm install ishlatganingizda, paketlar node_modules papkasiga
yuklanadi. U juda katta bo'lishi mumkin - minglab fayl.
| Fayl | Git ga qo'shiladimi |
|---|---|
package.json | Ha |
package-lock.json | Ha |
node_modules/ | Yo'q |
.env | Yo'q |
node_modules ni saqlash shart emas: package.json va
package-lock.json bo'lsa, uni istalgan vaqtda qayta yaratish
mumkin.
Loyiha tuzilishi #
Buyruq qatori argumentlari #
const argumentlar = process.argv.slice(2);
console.log("Argumentlar soni:", argumentlar.length);
console.log("Node yo'li bormi:", process.argv[0].includes("node"));
if (argumentlar.length === 0) {
console.log("Argument berilmadi");
}
Argumentlar soni: 0
Node yo'li bormi: true
Argument berilmadi
process.argv massivining birinchi ikki elementi doim bir xil:
Node ning yo'li va skript yo'li. Shuning uchun slice(2) qilinadi.
Buyruq qatorini jiddiy tahlil qilish kerak bo'lsa, Node da tayyor
parseArgs funksiyasi bor - uni 6-bo'limda ko'ramiz.
- Node ning LTS versiyasini o'rnating.
node --versionvanpm --versionbilan tekshiring.- REPL ni ochib, bir necha ifoda hisoblang.
npm init -ybilan loyiha yarating.package.jsonga"type": "module"qo'shing.- Usiz
importyozib, xato matnini ko'ring. scriptsgastartvadevqo'shing.node --watchbilan faylni o'zgartirib ko'ring..gitignoreyaratib,node_modulesva.envni qo'shing.PORT=8080 node index.jsbilan muhit o'zgaruvchisini bering.
Xulosa #
- LTS - juft raqamli versiyalar; ishlab chiqarish uchun doim shular.
npm init -ypackage.jsonyaratadi - loyihaning pasporti."type": "module"bo'lmasa,.jsdaimportishlamaydi.scriptsloyiha buyruqlarini saqlaydi;startvatestnirunsiz chaqirish mumkin.--watcho'zgarishda qayta ishga tushiradi -nodemonkerak emas.- Maxfiy ma'lumot muhit o'zgaruvchilarida;
--env-filebilan.envo'qiladi. .envvanode_modulesgit ga qo'shilmaydi,package-lock.jsonesa qo'shiladi.process.argv.slice(2)- haqiqiy argumentlar.
Keyingi bo'limda modullarni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.