Deno JavaScript platformasi NPM modullari bilan mos keladi

Deno 1.28 chiqarildi, bu JavaScript va TypeScript ilovalarini sinovdan o'tkazish uchun asos bo'lib, server tomonida ishlov beruvchilarni yaratish uchun ishlatilishi mumkin. Platforma Node.js yaratuvchisi Rayan Dahl tomonidan ishlab chiqilgan. Node.js singari, Deno ham Chromium-ga asoslangan brauzerlarda ishlatiladigan V8 JavaScript dvigatelidan foydalanadi. Shu bilan birga, Deno Node.js vilkasi emas, balki noldan yaratilgan yangi loyihadir. Loyiha kodi MIT litsenziyasi ostida tarqatiladi. Qurilishlar Linux, Windows va macOS uchun tayyorlangan.

Deno loyihasi foydalanuvchilarga xavfsizroq muhitni taqdim etish va Node.js arxitekturasida kontseptual xatolarni bartaraf etish uchun yaratilgan. Xavfsizlikni yaxshilash uchun V8 dvigateli Rust tilida yozilgan bo'lib, u past darajadagi xotira manipulyatsiyasidan kelib chiqadigan ko'plab zaifliklardan qochadi. Bloklanmagan rejimda so'rovlarni qayta ishlash uchun Rust-da yozilgan Tokio platformasidan foydalaniladi. Tokio sizga hodisalarga asoslangan arxitektura asosida yuqori samarali ilovalar yaratish imkonini beradi, ko'p tarmoqli o'tishni qo'llab-quvvatlaydi va asinxron rejimda tarmoq so'rovlarini qayta ishlaydi.

Yangi versiyadagi asosiy o‘zgarish NPM repozitoriyasida joylashtirilgan paketlar bilan muvofiqlikni barqarorlashtirish bo‘lib, bu Denoga Node.js platformasi uchun yaratilgan 1.3 milliondan ortiq modullardan foydalanish imkonini beradi. Masalan, Deno-ga asoslangan ilovalar endi Prisma, Mongoose va MySQL kabi ma'lumotlarga kirishning doimiy modullaridan hamda React va Vue kabi front-end ramkalaridan foydalanishi mumkin. Ayrim NPM modullari hali ham Deno bilan mos kelmaydi, masalan, package.json fayli kabi Node.js-ga xos muhit elementlariga ulanishlar tufayli. Bundan tashqari, NPM modullari bilan "deno kompilyatsiya" buyrug'idan foydalanish hali mumkin emas. Kelgusi nashrlar ushbu nomuvofiqliklar va cheklovlarni bartaraf etishni rejalashtirmoqda.

Denoning ilgari ishlatilgan ECMAScript modul tizimi va Web API modelini qo‘llab-quvvatlash bir xil darajada saqlanadi va Denoning tanish URL-ga asoslangan yuklash sxemasi NPM modullarini import qilish uchun ishlatiladi. NPM modullariga kirish uchun oddiy Deno modullari kabi ishlatilishi mumkin bo'lgan maxsus URL "npm:" prefiksi mavjud. Masalan, NPM modulini import qilish uchun siz “npm:chalk@5” dan “import { chalk };”ni belgilashingiz va NPM skriptini ishga tushirish uchun buyruq satridan “deno run --allow-env --allow”ni belgilashingiz mumkin. -npm:create-vite-extra-ni o'qing.”

Deno'da NPM paketlarini ishlatish Node.js'ga qaraganda ancha oson, chunki modullarni oldindan o'rnatishning hojati yo'q (modullar ilova birinchi ishga tushirilganda o'rnatiladi), package.json fayli yo'q va standart node_modules mavjud emas. katalog (modullar umumiy katalogda keshlangan, ammo "--node-modules-dir" opsiyasi yordamida eski xatti-harakatni qaytarish mumkin).

NPM-ga asoslangan ilovalar Denoning kirishni boshqarish, izolyatsiyalash va xavfsizlikka sezgir ilg'or imkoniyatlaridan foydalanish qobiliyatini saqlab qoladi. Shubhali bog'liqliklar orqali hujumlarga qarshi turish uchun Deno sukut bo'yicha tizimga bog'liqliklardan kirishga bo'lgan barcha urinishlarni bloklaydi va aniqlangan muammolar haqida ogohlantirishni ko'rsatadi. Misol uchun, modul /usr/bin/ ga yozish huquqini olishga harakat qilganda, ushbu operatsiyani tasdiqlash so'rovi ko'rsatiladi: deno run npm:install-malware ⚠️ ┌ Deno /usr/bin/ ga yozish ruxsatini so'raydi. ├ `install-malware` tomonidan so'ralgan ├ Bu taklifni chetlab o'tish uchun --allow-write bilan qayta ishga tushiring. └ Ruxsat bering? [y/n] (y = ha, ruxsat berish; n = yo'q, rad etish) >

Yangi versiyadagi NPM bo'lmagan yaxshilanishlar orasida V8 dvigatelini 10.9 versiyasini chiqarish uchun yangilash, qulflangan fayllarni avtomatik aniqlash, Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() barqarorlashtirish kiradi. va Deno API. .uid(), ishga tushirish buyruqlari uchun yangi beqaror API Deno.Command() qo‘shdi (Deno.spawn, Deno.spawnSync va Deno.spawnChild uchun universal almashtirish).

Denoning asosiy xususiyatlari:

  • Xavfsizlikka yo'naltirilgan standart konfiguratsiya. Faylga kirish, tarmoqqa ulanish va atrof-muhit o'zgaruvchilariga kirish sukut bo'yicha o'chirib qo'yilgan va aniq yoqilgan bo'lishi kerak. Ilovalar sukut bo'yicha izolyatsiyalangan sinov muhitida ishlaydi va aniq ruxsatnomalarsiz tizim imkoniyatlariga kira olmaydi;
  • JavaScript-dan tashqari TypeScript-ni o'rnatilgan qo'llab-quvvatlash. Turni tekshirish va JavaScript-ni yaratish uchun standart TypeScript kompilyatoridan foydalaniladi, bu esa V8 da JavaScript-ni tahlil qilish bilan solishtirganda ishlashning pasayishiga olib keladi;
  • Ish vaqti bitta mustaqil bajariladigan fayl ("deno") shaklida keladi. Deno yordamida ilovalarni ishga tushirish uchun platformangiz uchun 30 MB oʻlchamdagi, tashqi bogʻliqliklari yoʻq va tizimda maxsus oʻrnatishni talab qilmaydigan bitta bajariladigan faylni yuklab olishingiz kifoya. Bundan tashqari, deno monolit dastur emas, balki alohida ishlatilishi mumkin bo'lgan Rust sandiq paketlari (deno_core, rusty_v8) to'plamidir;
  • Dasturni ishga tushirishda, shuningdek, modullarni yuklash uchun siz URL manzilini ishlatishingiz mumkin. Masalan, Welcome.js dasturini ishga tushirish uchun siz “deno https://deno.land/std/examples/welcome.js” buyrug‘idan foydalanishingiz mumkin. Tashqi manbalardan olingan kod mahalliy tizimda yuklab olinadi va keshlanadi, lekin hech qachon avtomatik ravishda yangilanmaydi (yangilash uchun ilovani “--reload” bayrog‘i bilan aniq ishga tushirish kerak);
  • Ilovalarda HTTP orqali tarmoq so'rovlarini samarali qayta ishlash; platforma yuqori samarali tarmoq ilovalarini yaratish uchun mo'ljallangan;
  • Denoda ham, oddiy veb-brauzerda ham bajarilishi mumkin bo'lgan universal veb-ilovalarni yaratish qobiliyati;
  • Standart modullar to'plamining mavjudligi, ulardan foydalanish tashqi bog'liqliklar bilan bog'lanishni talab qilmaydi. Standart to'plamdagi modullar qo'shimcha audit va muvofiqlik sinovlaridan o'tgan;
  • Ish vaqti bilan bir qatorda, Deno platformasi paket menejeri vazifasini ham bajaradi va kod ichidagi URL orqali modullarga kirish imkonini beradi. Masalan, modulni yuklash uchun siz “https://deno.land/std/log/mod.ts” dan “import *” kodini belgilashingiz mumkin. URL orqali tashqi serverlardan yuklab olingan fayllar keshlanadi. Modul versiyalari bilan bogʻlanish URL ichidagi versiya raqamlarini koʻrsatish orqali aniqlanadi, masalan, “https://unpkg.com/[elektron pochta bilan himoyalangan]/dist/liltest.js";
  • Strukturaga integratsiyalangan qaramlikni tekshirish tizimi ("deno info" buyrug'i) va kodni formatlash uchun yordamchi dastur (deno fmt);
  • Barcha dastur skriptlari bitta JavaScript fayliga birlashtirilishi mumkin.

Manba: opennet.ru

a Izoh qo'shish