Mundarija (24)
- Bu darsda
- 1. Nega bu kerak?
- 2. node:sqlite: o'rnatilgan ma'lumotlar bazasi
- 2.1 SQLite nima
- 2.2 Birinchi jadval
- 2.3 Nega ? — xavfsizlik
- 2.4 Holati va qachon kerak
- 3. Global WebSocket klienti
- 4. Brauzerdan kelgan global'lar
- 5. Yangi JS metodlari: V8 13.6
- 5.1 Node 24 da hali yo'q
- 5.2 Temporal: bayroq bilan
- 6. Kriptografiya va siqish: qisqa
- 6.1 Hujjat bo'yicha holati
- 7. Qanday kuzatib borasiz?
- 8. CLI qadami: kanon nimani ishlatdi
- 9. Ko'p uchraydigan xatolar
- 10. Mashqlar
- 1-mashq (oson): bormi?
- 2-mashq (o'rta): kunlik kurslar jurnali
- 3-mashq (qiyin): imkoniyatlar hisoboti
- 11. Real ishda
- Xulosa
- Manbalar
Node.js yangi imkoniyatlari: node:sqlite, WebSocket, Temporal va paketsiz yechimlar
Qisqacha: Har Node versiyasi bir nechta npm paketini keraksiz qiladi. Node 24.21 da paketsiz ishlaydi:
node:sqlite(SQLite ma'lumotlar bazasi, bayroqsiz va ogohlantirishsiz), globalWebSocketklienti,URLPattern,navigator,import.meta.dirname,crypto.argon2Sync(parol hash'i),zlib.zstdCompressSyncva V8 13.6 ning yangi JS metodlari (Array.fromAsync,RegExp.escape,Error.isError, Set amallari).TemporalNode 24 da faqat--harmony-temporalbayrog'i bilan, Node 26 da esa sukut bo'yicha.Map.prototype.getOrInsertvaIterator.concatNode 24.21 da hali yo'q — biz tekshirdik.
Bu darsda
node:sqlitebilan jadval yaratib, tayyorlangan so'rov (prepared statement) bilan yozib-o'qiysiz.- Global
WebSocketklienti,URLPattern,navigatorvaimport.meta.dirnameni Node'da ishlatasiz. - Yangi JS metodlarining qaysi biri Node 24 da bor, qaysisi yo'qligini tekshirish usulini bilasiz.
- "Bu paket kerakmi yoki Node'da bormi?" degan savolga o'lchov va hujjat bilan javob bera olasiz.
Oldin bilishingiz kerak: Global obyektlar: Node va brauzer farqi, Built-in fetch va undici, crypto 2: parolni hash'lash, shifrlash va imzo, zlib: siqish, Temporal API.
1. Nega bu kerak?
Kichik loyihaga ma'lumotlar bazasi kerak bo'ldi — better-sqlite3 o'rnatiladi. U C++ da yozilgan, o'rnatishda kompilyatsiya qilinadi yoki tayyor ikkilik faylni yuklaydi. Windows'da bu ko'pincha birinchi muammo. WebSocket klienti uchun ws, URL naqshi uchun path-to-regexp, parol uchun argon2 — har biri yana bitta bog'liqlik.
Node har yili bunday paketlarning bir qismini ichiga oladi. Ularni bilmasangiz, keraksiz paket o'rnatasiz. Bilsangiz — loyiha yengilroq, xavfsizroq va o'rnatish tezroq (ta'minot zanjiri darsi).
O'xshatish: yangi telefon. Avval chiroq, kompas va QR o'quvchi uchun alohida ilova o'rnatardingiz. Endi hammasi tizimning o'zida. Eski ilovalar hali ishlaydi, lekin yangi telefonga ularni o'rnatish shart emas.
2. node:sqlite: o'rnatilgan ma'lumotlar bazasi
2.1 SQLite nima
SQLite — bitta faylda yashaydigan ma'lumotlar bazasi. Server kerak emas: dastur faylni o'zi o'qiydi va yozadi. Telefon ilovalari, brauzerlar va ko'p desktop dasturlar ichida SQLite bor. SQL tilini 26-qismda chuqur o'rganasiz — bugun faqat Node'dan qanday ulanishni ko'ramiz.
Node 24.21 ichida SQLite 3.53.4 (runtime darsidagi process.versions ro'yxatida bor). Modul — node:sqlite.
2.2 Birinchi jadval
Blok Node uchun — o'z terminalingizda ishga tushiring:
import { DatabaseSync } from "node:sqlite";
const db = new DatabaseSync(":memory:"); // fayl o'rniga xotirada
db.exec(`
CREATE TABLE kurs (
sana TEXT, kod TEXT, qiymat REAL,
PRIMARY KEY (sana, kod)
)
`);
const insert = db.prepare(
"INSERT INTO kurs (sana, kod, qiymat) VALUES (?, ?, ?)",
);
insert.run("2026-10-22", "USD", 11965.51);
insert.run("2026-10-23", "USD", 11903.15);
insert.run("2026-10-23", "EUR", 13329.15);
const avg = db.prepare(
"SELECT kod, AVG(qiymat) AS o, COUNT(*) AS n" +
" FROM kurs GROUP BY kod",
);
console.log(avg.all());
const one = db.prepare(
"SELECT qiymat FROM kurs WHERE sana = ? AND kod = ?",
);
console.log(one.get("2026-10-23", "EUR"));
console.log(one.get("2026-10-23", "GBP"));
db.close();Konsolda:
[
[Object: null prototype] { kod: 'EUR', o: 13329.15, n: 1 },
[Object: null prototype] { kod: 'USD', o: 11934.33, n: 2 }
]
[Object: null prototype] { qiymat: 13329.15 }
undefinedQatorma-qator:
new DatabaseSync(":memory:")— baza xotirada; dastur tugasa yo'qoladi. Fayl uchun —new DatabaseSync("kurslar.db").db.exec(sql)— natija qaytarmaydigan buyruq (jadval yaratish).db.prepare(sql)— tayyorlangan so'rov (prepared statement): SQL bir marta tahlil qilinadi,?o'rniga qiymat keyin beriladi.run(...)— yozish;all(...)— hamma qatorlar massivi;get(...)— birinchi qator yokiundefined.[Object: null prototype]— qator obyekti prototipsiz yaratilgan (toStringkabi meros metodlari yo'q). Ma'nosi oddiy obyekt bilan bir xil.
Nomi Sync bejiz emas: hamma amallar sinxron. Blocking darsidagi qoida shu yerda ham amal qiladi: CLI va skriptda joiz, ko'p mijozli serverda katta so'rov event loop'ni to'xtatadi.
2.3 Nega ? — xavfsizlik
Qiymatni SQL matniga qo'shib yozish mumkin edi: `… WHERE kod = '${kod}'`. Lekin kod foydalanuvchidan kelsa, u ' OR '1'='1 bo'lishi mumkin — so'rov ma'nosi o'zgaradi. Bu SQL injection — eng mashhur hujumlardan biri, 26-qismda batafsil. ? bilan qiymat hech qachon SQL kodi bo'lib qolmaydi — u faqat ma'lumot.
Diqqat: Kursdagi kod qoidamiz: SQL satrini birlashtirib yozmaymiz, hatto misolda ham. Faqat
?yoki nomli parametr ($kod).
2.4 Holati va qachon kerak
Hujjatga ko'ra node:sqlite — "Stability 1.2 — Release candidate" (24.15.0 dan). Bayroq 23.4.0 / 22.13.0 dan beri kerak emas. Kanon tekshiruvi: Node 24.21 da stderr bo'sh — ogohlantirish chiqmaydi. "Release candidate" — API deyarli tayyor, lekin kichik o'zgarishlar bo'lishi mumkin.
| Ehtiyoj | Nima tanlash |
|---|---|
| CLI kesh, sozlama, lokal jurnal | node:sqlite yoki oddiy JSON |
| Desktop ilova (Electron) bazasi | node:sqlite |
| Ko'p foydalanuvchili veb-server | PostgreSQL (26-qism) |
| Eski Node (22.12 va oldin) | better-sqlite3 |
valyuta uchun o'lchov. Kanon node:sqlite ni ishlatmadi. Kesh — bir nechta JSON fayl (kurslar-<kalit>.json, har biri ~25 KB): bitta kalit bo'yicha o'qish va yozish. SQL so'rov kerak emas, faylni qo'lda ochib ko'rish esa qulay. Biz ishga tushish narxini ham solishtirdik (15 marta, mediana; mashina band edi — raqamlar odatdagidan yuqori): bo'sh fayl 192 ms, SQLite faylga bitta yozish 221 ms, JSON faylga yozish 216 ms. Farq shovqin ichida — tezlik emas, ehtiyoj hal qiladi.
Tekshirib ko'ring:
valyutaga "har kuni kursni saqlab boring, keyin 1 yillik o'rtachani ko'rsating" degan talab keldi. JSON fayllar yokinode:sqlite— qaysi biri mos va nega?
Javob
node:sqlite mosroq. 365 kun × bir necha valyuta — minglab yozuv. Yillik o'rtacha — SELECT AVG(qiymat) … WHERE sana BETWEEN ? AND ? bitta so'rov bilan. JSON fayllarda hammasini o'qib, JS'da hisoblash kerak bo'lardi. Hozirgi kesh esa "bitta kalit — bitta javob": u yerda JSON yetadi.
3. Global WebSocket klienti
WebSocket — server bilan doimiy ikki tomonlama ulanish (11-qismda brauzerda ko'rgansiz). Node 22 dan WebSocket global, Node 24 da u brauzerdagi API bilan bir xil. Faqat klient: server tomoni uchun hali ham ws paketi yoki framework kerak (WebSocket va ws — 29-qismda).
Server yo'q portga ulanishga urinsak, hodisalar brauzerdagidek keladi:
import { createServer } from "node:net";
// bo'sh port: ochamiz va darhol yopamiz
const tmp = createServer();
await new Promise((ok) => tmp.listen(0, "127.0.0.1", ok));
const port = tmp.address().port;
tmp.close();
const ws = new WebSocket(`ws://127.0.0.1:${port}/`);
ws.addEventListener("error", (e) => console.log("error:", e.type));
ws.addEventListener("close", (e) => console.log("close:", e.code));Konsolda:
error: error
close: 10061006 — "g'ayritabiiy yopilish": ulanish hech qachon o'rnatilmadi. Haqiqiy server bilan ishlash xuddi brauzerdagidek:
const ws = new WebSocket("wss://example.com/kurslar");
ws.addEventListener("open", () => {
ws.send(JSON.stringify({ kod: "USD" }));
});
ws.addEventListener("message", (e) => {
console.log(JSON.parse(e.data));
});Bu parcha — namuna (example.com da WebSocket server yo'q), biz uni ishga tushirmadik.
4. Brauzerdan kelgan global'lar
Global obyektlar darsida ro'yxatni ko'rgansiz. Ulardan uchtasi kundalik ishda foydali:
const pattern = new URLPattern({ pathname: "/json/:kod/:sana/" });
const url =
"https://cbu.uz/uz/arkhiv-kursov-valyut/json/USD/2026-10-01/";
const m = pattern.exec(url);
console.log(m?.pathname.groups ?? "mos emas");
console.log(navigator.userAgent, navigator.hardwareConcurrency > 0);
console.log(import.meta.filename.endsWith(".mjs"));Konsolda:
mos emas
Node.js/24 true
trueBirinchi qatorga qarang: mos emas! Naqsh /json/… bilan boshlanadi, haqiqiy yo'l esa /uz/arkhiv-kursov-valyut/json/…. URLPattern yo'lni boshidan oxirigacha solishtiradi. Tuzatilgani:
const pattern = new URLPattern({ pathname: "/*/json/:kod/:sana/" });
const url =
"https://cbu.uz/uz/arkhiv-kursov-valyut/json/USD/2026-10-01/";
console.log(pattern.exec(url)?.pathname.groups);Konsolda:
{ '0': 'uz/arkhiv-kursov-valyut', kod: 'USD', sana: '2026-10-01' }* — istalgan qism (natijada '0' kaliti bilan), :kod va :sana — nomli guruhlar. Kanon o'lchovi ham shu natijani bergan ({ kod: 'USD', sana: '2026-10-01' }). Bu path-to-regexp kabi paketlarning o'rnini bosadi.
navigator.userAgent—"Node.js/24";hardwareConcurrency— mantiqiy yadrolar soni (kanon mashinasida 16). Kodning Node'da ishlayotganini aniqlash uchun ishlatiladi.import.meta.dirname/import.meta.filename— ESM'da__dirname/__filenameo'rni (ES Modules darsi).
5. Yangi JS metodlari: V8 13.6
Node 24.21 — V8 13.6. Bu brauzer emas, lekin til imkoniyatlari bir xil dvigateldan keladi. Bu blok toza JS — saytdagi «Ishga tushir» (Chrome) bilan ham sinashingiz mumkin:
const gen = async function* () {
yield 11903.15;
yield 13329.15;
};
console.log(await Array.fromAsync(gen()));
console.log(RegExp.escape("1.5$"));
const fake = { message: "x" };
console.log(Error.isError(new TypeError("x")), Error.isError(fake));
const parsed = Promise.try(() => JSON.parse("{"));
console.log(await parsed.catch((e) => e.name));
console.log(new Set(["USD", "EUR"]).union(new Set(["EUR", "RUB"])));Konsolda:
[ 11903.15, 13329.15 ]
\x31\.5\$
true false
SyntaxError
Set(3) { 'USD', 'EUR', 'RUB' }| Metod | Nima qiladi | O'rnini bosadi |
|---|---|---|
Array.fromAsync |
Async iterator'dan massiv | for await + push |
RegExp.escape |
Matnni regex uchun xavfsiz qiladi (. → \.) |
escape-string-regexp paketi |
Error.isError |
Haqiqiy Error mi (boshqa realm'dan ham) |
instanceof Error (ishonchsiz) |
Promise.try |
Sinxron xatoni ham Promise'ga o'raydi | new Promise(r => r(f())) |
Set.union, intersection … |
To'plam amallari | qo'lda sikl, lodash |
RegExp.escape("1.5$") dagi \x31 — birinchi raqam ham qochiriladi. Bu ataylab: natija boshqa regex qismiga ulanganda (\1 + 5 kabi) raqam "orqaga havola" bo'lib qolmasin.
5.1 Node 24 da hali yo'q
Biz har birini typeof bilan tekshirdik (Node 24.21.0):
Map.prototype.getOrInsert undefined
Iterator.concat undefined
Uint8Array.fromBase64 undefined
Math.sumPrecise undefined
Temporal undefinedUlar — TC39 takliflari yoki yangiroq V8 imkoniyatlari. Kod yozishdan oldin aynan sizning Node versiyangizda borligini tekshiring: node -p "typeof Map.prototype.getOrInsert". Maqola "JavaScript'da bor" desa, bu hali Node'da bor degani emas.
5.2 Temporal: bayroq bilan
Temporal darsida uni brauzerda ko'rgansiz. Node 24 da u bayroq ortida:
// node --harmony-temporal
const d = Temporal.PlainDate.from("2026-10-23");
console.log(d.add({ days: 3 }).toString(), d.dayOfWeek);Konsolda:
2026-10-26 5Birinchi qatordagi izoh — zavod tekshiruvchisi uchun bayroq; o'zingiz node --harmony-temporal fayl.mjs deb ishga tushirasiz. dayOfWeek — 5, juma. Node 26.0.0 (2026-05-05) relizida "Temporal API endi sukut bo'yicha yoqilgan". Node 24 da prod kodda bayroqqa tayanmang.
6. Kriptografiya va siqish: qisqa
Ikki imkoniyat alohida darslarda chuqur o'rganilgan, bu yerda faqat "bor" deb belgilaymiz:
crypto.argon2Sync— parolni hash'lash uchun zamonaviy algoritm. Kanon o'lchovi: argon2id (19 MiB, 2 o'tish) 31 ms, ogohlantirishsiz. 24.7.0 da qo'shilgan; alohida stability belgisi yo'q, ya'ninode:cryptomodulining darajasi — 2 (barqaror). Avvalargon2npm paketi kerak edi (crypto 2 darsi).zlib.zstdCompressSync— Zstandard siqish. Kanon: CBU javobi 25 533 bayt → zstd 5 464 (siqish 87 µs), gzip 4 722 (738 µs) (zlib darsi). Hujjatda: Stability 1 — Experimental, 23.8.0 va 22.15.0 da qo'shilgan.
Mana, zstd ham gzip kabi bir qatorda ishlaydi:
import { gzipSync, zstdCompressSync, zstdDecompressSync }
from "node:zlib";
const row = '{"Ccy":"USD","Rate":"11903.15","Date":"23.10.2026"},';
const text = "[" + row.repeat(74) + "]";
const z = zstdCompressSync(text);
const g = gzipSync(text);
console.log(Buffer.byteLength(text), z.length, g.length);
console.log(zstdDecompressSync(z).toString() === text);Konsolda:
3850 69 98
true74 marta takrorlangan qator juda yaxshi siqiladi (3 850 → 69 bayt) — haqiqiy ma'lumotda nisbat ancha past (yuqoridagi kanon raqamlari).
6.1 Hujjat bo'yicha holati
"Ishlaydi" va "barqaror" — har xil narsa. Node 24 hujjatini (2026-10 holatiga) tekshirdik:
| Imkoniyat | Qachondan bor | Hujjatdagi holati | Node 24.21 da ogohlantirish |
|---|---|---|---|
node:sqlite |
22.5.0 (bayroqsiz — 22.13.0) | 1.2 — Release candidate (24.15.0 dan) | yo'q |
crypto.argon2Sync |
24.7.0 | alohida belgi yo'q — node:crypto moduli barqaror (2) |
yo'q |
zlib.zstdCompressSync |
22.15.0 | 1 — Experimental | yo'q |
Temporal |
— | Node 24 da bayroq ortida; Node 26 da sukut bo'yicha | — |
Ogohlantirish ustunini biz o'zimiz tekshirdik: uchala API'ni Node 24.21.0 da chaqirdik, stderr bo'sh qoldi. Diqqat: zstd ogohlantirishsiz ishlaydi, lekin hujjatda hali Experimental. Ya'ni uning API'si keyingi versiyalarda o'zgarishi mumkin.
7. Qanday kuzatib borasiz?
Node deyarli har oy yangi kichik versiya chiqaradi. Paket qo'shishdan oldin uch qadam:
node -p "typeof X"yokinode -e "import('node:sqlite').then(() => console.log('bor'))"— sizning versiyangizda bormi.- Hujjatdagi Stability belgisi: 0 — eskirgan, 1.x — eksperimental (1.2 — release candidate), 2 — barqaror.
stderrdaExperimentalWarningchiqadimi — prod'da log'ni ifloslaydi.
flowchart TB
Q["Paket kerak bo'ldi"] --> N{"Node'da bormi?<br/>node -p typeof"}
N -->|yo'q| P["Paket: faol, kichik,<br/>turlari bor"]
N -->|bor| S{"Stability?"}
S -->|"2 yoki 1.2"| U["Node'nikini ishlating"]
S -->|"1.0 / 1.1"| E["Sinab ko'ring,<br/>prod'da ehtiyot"]Diagrammaning chap tarmog'i — paket tanlash (paket tanlash darsi), o'ng tarmog'i — Node'ning o'z imkoniyati. Asosiy savol yuqorida: "Node'da bormi?".
8. CLI qadami: kanon nimani ishlatdi
Bu dars uchun valyuta da yangi holat yo'q. Lekin loyiha shu qismda allaqachon Node'ning "yangi" imkoniyatlariga to'la — kanon tajribasi (t43) ro'yxati:
| Imkoniyat | Qaysi darsda | valyuta da |
|---|---|---|
node:test |
12-qism | 39 ta test (holat 41) |
fs.glob |
fs chuqur | keshRoyxati |
util.parseArgs, util.styleText |
util moduli | bayroqlar, rangli farq |
| type stripping | TS to'g'ridan | node src/bin.ts |
--env-file-if-exists, --run |
--watch, --env-file | dev, start |
fetch, AbortSignal.any |
fetch va undici | manba.ts |
Kirmaganlar va sababi: node:sqlite — kesh "bitta kalit, bitta JSON" (yuqoridagi o'lchov); WebSocket — CBU real vaqt API bermaydi; argon2 — parol yo'q; zstd — kesh siqilmaydi (25 KB, zlib darsidagi qaror). Natija: prod bog'liqlik 0.
9. Ko'p uchraydigan xatolar
| Belgi | Sabab | Davosi |
|---|---|---|
TypeError: Map.prototype.getOrInsert is not a function |
Node 24 da yo'q | Versiyani tekshiring; o'zingiz yozing |
ReferenceError: Temporal is not defined |
Node 24 da bayroqsiz yo'q | --harmony-temporal yoki Node 26 |
Cannot find module 'sqlite' |
node: prefiksi tushib qoldi |
import … from "node:sqlite" |
| SQLite so'rovi serverni sekinlatdi | DatabaseSync sinxron |
Kichik so'rovlar yoki alohida worker |
| SQL injection | Qiymat SQL matniga qo'shildi | Faqat ? parametr |
WebSocket server yaratib bo'lmadi |
Node faqat klient beradi | ws paketi yoki framework |
URLPattern null qaytardi |
Naqsh yo'lning boshidan mos emas | /*/… yoki to'liq yo'l |
10. Mashqlar
Yechimlar kurs/mashqlar/24/43-yangi-imkoniyatlar/ da.
1-mashq (oson): bormi?
Node 24.21 da, bayroqsiz:
node:sqlite—Temporal—WebSocketserver —Map.prototype.getOrInsert—RegExp.escape—
Yechim
- ha — release candidate, ogohlantirishsiz.
- yo'q —
--harmony-temporalbilan bor; Node 26 da sukut bo'yicha. - yo'q — faqat klient (
WebSocketglobal). - yo'q — biz
typeofbilan tekshirdik:undefined. - ha — V8 13.6.
2-mashq (o'rta): kunlik kurslar jurnali
node:sqlite bilan xotiradagi bazada kurs (sana, kod, qiymat) jadvalini yarating. 5 kunlik USD kursini (11980, 11965.51, 11950, 11930, 11903.15; sanalar 2026-10-19 … 2026-10-23) bitta tranzaksiyada yozing (db.exec("BEGIN") … "COMMIT"). Keyin bitta so'rov bilan min, max va o'rtachani (2 xona) chiqaring.
Yechim
import { DatabaseSync } from "node:sqlite";
const db = new DatabaseSync(":memory:");
db.exec("CREATE TABLE kurs (sana TEXT, kod TEXT, qiymat REAL)");
const values = [11980, 11965.51, 11950, 11930, 11903.15];
const insert = db.prepare("INSERT INTO kurs VALUES (?, 'USD', ?)");
db.exec("BEGIN");
values.forEach((v, i) => insert.run(`2026-10-${19 + i}`, v));
db.exec("COMMIT");
const stats = db.prepare(`
SELECT MIN(qiymat) AS min, MAX(qiymat) AS max,
ROUND(AVG(qiymat), 2) AS avg, COUNT(*) AS n
FROM kurs WHERE kod = ?
`);
console.log({ ...stats.get("USD") });
db.close();Konsolda:
{ min: 11903.15, max: 11980, avg: 11945.73, n: 5 }{ ...stats.get(…) } — prototipsiz obyektni oddiy obyektga ko'chiradi, shuning uchun [Object: null prototype] yozuvi chiqmaydi. Tranzaksiya — "hammasi yoki hech biri": o'rtada xato bo'lsa, ROLLBACK bilan qisman yozuv qolmaydi.
3-mashq (qiyin): imkoniyatlar hisoboti
report(features) funksiyasini yozing: features — { nomi: () => qiymat } obyekti. Har biri uchun funksiyani chaqirib, "<nomi>: bor" yoki "<nomi>: yo'q" qatorini qaytarsin (undefined yoki xato — "yo'q"). Oxirida "N/M bor". Bu toza JS — saytda (Chrome) va Node'da natija farq qilishi mumkin: shunisi qiziq.
Yechim
function report(features) {
const lines = [];
let count = 0;
for (const [name, probe] of Object.entries(features)) {
let ok;
try {
ok = probe() !== undefined;
} catch {
ok = false;
}
if (ok) count++;
lines.push(`${name}: ${ok ? "bor" : "yo'q"}`);
}
lines.push(`${count}/${lines.length} bor`);
return lines.join("\n");
}
console.log(report({
"Array.fromAsync": () => Array.fromAsync,
"RegExp.escape": () => RegExp.escape,
"Error.isError": () => Error.isError,
"Map.getOrInsert": () => Map.prototype.getOrInsert,
"Iterator.concat": () => Iterator.concat,
Temporal: () => globalThis.Temporal,
}));Konsolda:
Array.fromAsync: bor
RegExp.escape: bor
Error.isError: bor
Map.getOrInsert: yo'q
Iterator.concat: yo'q
Temporal: yo'q
3/6 borBu — Node 24.21 natijasi. Saytdagi «Ishga tushir» (Chrome) natijasi boshqacha bo'lishi mumkin. Brauzerlar ba'zi imkoniyatlarni Node'dan oldin oladi. lines.length push dan oldin hisoblanadi — shuning uchun oxirgi qatorda 6, 7 emas. try/catch kerak: ba'zi tekshiruv xato tashlashi mumkin (masalan, Iterator o'zi yo'q eski muhitda).
11. Real ishda
- Kodni ko'rib chiqishda (code review) tez-tez beriladigan savol: "Bu paket Node'da bor emasmi?".
dotenv,node-fetch,uuid(crypto.randomUUID),rimraf(fs.rm({ recursive })),glob(fs.glob) — eng ko'p uchraydigan "keraksiz" paketlar. - Electron va desktop ilovalar —
node:sqlitelokal baza uchun tabiiy tanlov. - CLI vositalar — har paket sovuq startni sekinlashtiradi (Commander o'lchovi); o'rnatilgan imkoniyat — bepul.
- Intervyu savoli: "Node'ning qaysi yangi versiyasida nima paydo bo'lganini qanday kuzatasiz?" — changelog,
node --help, hujjatdagi Stability.
Xulosa
node:sqlite— Node 24 da bayroqsiz va ogohlantirishsiz (release candidate); sinxron, faqat?parametr bilan.WebSocket— global klient (server — yo'q);URLPatternyo'lni boshidan oxirigacha solishtiradi.- V8 13.6:
Array.fromAsync,RegExp.escape,Error.isError,Promise.try, Set amallari bor;Map.getOrInsert,Iterator.concat,Uint8Array.fromBase64— Node 24.21 da yo'q. Temporal— Node 24 da--harmony-temporal, Node 26 da sukut bo'yicha.- Paket qo'shishdan oldin: versiyangizda bormi, Stability qanday, ogohlantirish bormi.
Keyingi dars: Permission model — Node jarayoniga faqat kerakli papkalarga ruxsat berish va nega --permission Node 24 da tarmoqni cheklamaydi.
Manbalar
- Node.js 24 hujjati — SQLite (Stability 1.2, 24.15.0; bayroqsiz 23.4.0/22.13.0): https://nodejs.org/docs/latest-v24.x/api/sqlite.html
- Node.js 24 hujjati — Globals (
WebSocket,navigator,URLPattern): https://nodejs.org/docs/latest-v24.x/api/globals.html - Node.js 24 hujjati — crypto (
crypto.argon2, 24.7.0): https://nodejs.org/docs/latest-v24.x/api/crypto.html ; zlib (zstd, Experimental, 22.15.0): https://nodejs.org/docs/latest-v24.x/api/zlib.html - Node.js 26.0.0 release notes (2026-05-05, Temporal sukut bo'yicha): https://nodejs.org/en/blog/release/v26.0.0
- MDN —
RegExp.escape,Error.isError,Array.fromAsync: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects - Kanon:
t43-yangi(sqlite ogohlantirishsiz, URLPattern,node --helpbayroqlari),t21-crypto2(argon2 31 ms),t22-zlib(zstd),t07-global.typeoftekshiruvlari, WebSocket, sqlite/JSON o'lchovi — biz ishga tushirdik (Node 24.21.0, Windows 11).
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!