A Deno JavaScript platform kompatibilis az NPM modulokkal

Megjelent a Deno 1.28, a JavaScript és TypeScript alkalmazások sandbox-kezelésére szolgáló keretrendszer, amellyel szerveroldali kezelők hozhatók létre. A platformot Ryan Dahl, a Node.js megalkotója fejlesztette ki. A Node.js-hez hasonlóan a Deno is a V8 JavaScript motort használja, amelyet a Chromium alapú böngészők is használnak. Ugyanakkor a Deno nem a Node.js elágazása, hanem egy új projekt, amelyet a semmiből hoztak létre. A projekt kódját az MIT licence alatt terjesztik. A buildek Linux, Windows és macOS számára készültek.

A Deno projektet azért hozták létre, hogy biztonságosabb környezetet biztosítsanak a felhasználóknak, és kiküszöböljék a Node.js architektúra fogalmi hibáit. A biztonság növelése érdekében a V8-as motor Rust nyelven íródott, ami elkerüli az alacsony szintű memóriamanipulációból adódó számos sebezhetőséget. A kérések nem blokkoló módban történő feldolgozásához a Tokio platformot használják, amely szintén Rust nyelven íródott. A Tokio lehetővé teszi az eseményvezérelt architektúrán alapuló nagy teljesítményű alkalmazások létrehozását, amelyek támogatják a többszálú feldolgozást és a hálózati kérések aszinkron módban történő feldolgozását.

Az új kiadás kulcsfontosságú változása az NPM repository-ban tárolt csomagokkal való kompatibilitás stabilizálása, amely lehetővé teszi a Deno számára, hogy több mint 1.3 millió, a Node.js platformhoz készített modult használjon. Például a Deno-alapú alkalmazások már használhatnak állandó adatelérési modulokat, mint például a Prisma, Mongoose és MySQL, valamint olyan front-end keretrendszereket, mint a React és a Vue. Egyes NPM-modulok továbbra sem kompatibilisek a Denóval, például a Node.js-specifikus környezeti elemekhez (például a package.json fájlhoz) való kötések miatt. A "deno compile" parancsot sem lehet még használni NPM modulokkal. A jövőbeli kiadások ezeket az összeférhetetlenségeket és korlátozásokat kívánják orvosolni.

A Deno korábban használt ECMAScript modulrendszerének és Web API modelljének támogatása változatlan marad, és a Deno ismerős URL-alapú betöltési sémáját használják az NPM-modulok importálására. Az NPM modulok eléréséhez egy speciális „npm:” URL előtag található, amely ugyanúgy használható, mint a hagyományos Deno modulok. Például egy NPM-modul importálásához megadhatja az "import { chalk } from "npm:chalk@5";' parancsot, és futtathat egy NPM-szkriptet a parancssorból - "deno run --allow-env --allow -read npm:create- vite-extra.”

Az NPM-csomagok használata a Deno-ban sokkal egyszerűbb, mint a Node.js-ben, mivel nincs szükség modulok előzetes telepítésére (a modulok telepítése az alkalmazás első indításakor történik), nincs package.json fájl, és nincs alapértelmezett node_modules könyvtár (a modulok a megosztott könyvtárban vannak gyorsítótárazva, de lehetőség van a régi viselkedés visszaállítására a „--node-modules-dir” opcióval).

Az NPM-alapú alkalmazások megtartják a Deno hozzáférés-vezérlési, elkülönítési és biztonsági érzékeny speciális képességeinek használatát. A megkérdőjelezhető függőségeken keresztüli támadások leküzdésére a Deno alapértelmezés szerint blokkol minden olyan kísérletet, amellyel a rendszerhez függőségekből hozzá lehet férni, és figyelmeztetést jelenít meg az észlelt problémákról. Például, amikor egy modul megpróbál írási hozzáférést szerezni a /usr/bin/ fájlhoz, megjelenik egy megerősítési kérés ehhez a művelethez: deno run npm:install-malware ⚠️ ┌ A Deno írási hozzáférést kér a /usr/bin/ fájlhoz. ├ `install-malware` kérte. ├ Futtassa újra az --allow-write parancsot a prompt megkerüléséhez. └ Engedélyezi? [y/n] (y = igen, megengedi; n = nem, tagadja) >

Az új verzióban az NPM-en kívüli fejlesztések közé tartozik a V8-as motor frissítése a 10.9-es verzióra, a zárolt fájlok automatikus felismerése, a Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() stabilizálása. és Deno API-k..uid(), új instabil API Deno.Command() hozzáadásával a parancsok futtatásához (univerzális helyettesítő a Deno.spawn, Deno.spawnSync és Deno.spawnChild számára).

A Deno főbb jellemzői:

  • Biztonságorientált alapértelmezett konfiguráció. A fájlhozzáférés, a hálózatépítés és a környezeti változókhoz való hozzáférés alapértelmezés szerint le van tiltva, és kifejezetten engedélyezni kell. Az alkalmazások alapértelmezés szerint elszigetelt sandbox környezetben futnak, és nem férhetnek hozzá a rendszer képességeihez kifejezett engedélyek megadása nélkül;
  • Beépített TypeScript-támogatás a JavaScript-en túl. A típusellenőrzéshez és a JavaScript generálásához a szabványos TypeScript fordítót használjuk, ami teljesítménycsökkenéshez vezet a V8-as JavaScript-elemzéshez képest;
  • A futási idő egyetlen önálló végrehajtható fájl („deno”) formájában érkezik. A Deno használatával történő alkalmazások futtatásához mindössze egy futtatható fájlt kell letöltenie a platformra, körülbelül 30 MB méretű, amely nem rendelkezik külső függőséggel, és nem igényel különleges telepítést a rendszerre. Ráadásul a deno nem monolitikus alkalmazás, hanem Rust ládacsomagok gyűjteménye (deno_core, rusty_v8), amelyek külön is használhatók;
  • A program indításakor, valamint a modulok betöltésekor használhatja az URL címzést. Például a welcome.js program futtatásához használhatja a „deno https://deno.land/std/examples/welcome.js” parancsot. A külső erőforrásokból származó kód letöltődik és gyorsítótárazásra kerül a helyi rendszeren, de soha nem frissül automatikusan (a frissítéshez kifejezetten az alkalmazás „--reload” jelzővel való futtatása szükséges);
  • A hálózati kérések hatékony feldolgozása HTTP-n keresztül az alkalmazásokban; a platformot nagy teljesítményű hálózati alkalmazások létrehozására tervezték;
  • Lehetőség olyan univerzális webalkalmazások létrehozására, amelyek Deno-ban és normál webböngészőben is végrehajthatók;
  • Szabványos modulkészlet jelenléte, amelynek használata nem igényli a külső függőségekhez való kötődést. A szabványgyűjtemény moduljai további auditon és kompatibilitási tesztelésen estek át;
  • A futási időn kívül a Deno platform csomagkezelőként is működik, és lehetővé teszi a modulok elérését a kódon belüli URL-en keresztül. Például egy modul betöltéséhez a kódban megadhatja az „import * as log from „https://deno.land/std/log/mod.ts” címet. A külső szerverekről URL-en keresztül letöltött fájlok gyorsítótárban vannak. A modulverziókhoz való kötődést az URL-en belüli verziószámok megadásával határozzák meg, például „https://unpkg.com/[e-mail védett]/dist/liltest.js";
  • A struktúra tartalmaz egy integrált függőségi vizsgálati rendszert (a „deno info” parancsot) és egy kódformázó segédprogramot (deno fmt);
  • Az összes alkalmazásszkript egy JavaScript-fájlba kombinálható.

Forrás: opennet.ru

Hozzászólás