Ang platform ng Deno JavaScript ay katugma sa mga module ng NPM

Ang Deno 1.28 ay inilabas, isang balangkas para sa sandboxing JavaScript at TypeScript na mga application na maaaring magamit upang lumikha ng mga tagapangasiwa sa panig ng server. Ang platform ay binuo ni Ryan Dahl, ang lumikha ng Node.js. Tulad ng Node.js, ginagamit ni Deno ang V8 JavaScript engine, na ginagamit din sa mga browser na nakabatay sa Chromium. Kasabay nito, ang Deno ay hindi isang tinidor ng Node.js, ngunit isang bagong proyekto na nilikha mula sa simula. Ang code ng proyekto ay ipinamahagi sa ilalim ng lisensya ng MIT. Ang mga build ay inihanda para sa Linux, Windows at macOS.

Ang proyektong Deno ay nilikha upang mabigyan ang mga user ng isang mas secure na kapaligiran at alisin ang mga error sa konsepto sa arkitektura ng Node.js. Upang mapabuti ang seguridad, ang V8 engine ay nakasulat sa Rust, na umiiwas sa marami sa mga kahinaan na nagmumula sa mababang antas ng pagmamanipula ng memorya. Upang iproseso ang mga kahilingan sa isang non-blocking mode, ang Tokio platform, na nakasulat din sa Rust, ay ginagamit. Binibigyang-daan ka ng Tokio na lumikha ng mga application na may mataas na pagganap batay sa arkitektura na hinimok ng kaganapan, na sumusuporta sa mga kahilingan sa multi-threading at pagproseso ng network sa asynchronous mode.

Ang isang mahalagang pagbabago sa bagong release ay ang stabilization ng compatibility sa mga package na naka-host sa NPM repository, na nagpapahintulot kay Deno na gumamit ng higit sa 1.3 milyong module na ginawa para sa Node.js platform. Halimbawa, ang Deno-based na mga application ay maaari na ngayong gumamit ng persistent data access modules gaya ng Prisma, Mongoose at MySQL, pati na rin ang front-end frameworks gaya ng React at Vue. Ang ilang NPM module ay nananatiling hindi tugma sa Deno, halimbawa dahil sa mga pag-binding sa mga elemento ng environment na partikular sa Node.js gaya ng package.json file. Hindi pa rin posible na gamitin ang utos na "deno compile" sa mga module ng NPM. Plano ng mga release sa hinaharap na tugunan ang mga hindi pagkakatugma at limitasyong ito.

Ang suporta para sa dating ginamit na ECMAScript module system ni Deno at modelo ng Web API ay pinananatili sa parehong antas, at ang pamilyar na URL-based loading scheme ni Deno ay ginagamit para mag-import ng mga NPM module. Upang ma-access ang mga module ng NPM, mayroong isang espesyal na prefix ng URL na "npm:", na maaaring magamit sa parehong paraan tulad ng mga regular na module ng Deno. Halimbawa, para mag-import ng NPM module, maaari mong tukuyin ang 'import { chalk } mula sa "npm:chalk@5";', at para magpatakbo ng NPM script mula sa command line - "deno run --allow-env --allow -read npm:create- vite-extra.”

Ang paggamit ng mga NPM package sa Deno ay mas madali kaysa sa Node.js, dahil hindi na kailangang mag-pre-install ng mga module (naka-install ang mga module noong unang inilunsad ang application), walang package.json file, at walang default na node_modules direktoryo (naka-cache ang mga module sa nakabahaging direktoryo, ngunit posibleng ibalik ang dating gawi gamit ang opsyong “--node-modules-dir”).

Ang mga application na nakabatay sa NPM ay nagpapanatili ng kakayahang gamitin ang access control, paghihiwalay, at mga advanced na kakayahan na sensitibo sa seguridad ni Deno. Upang kontrahin ang mga pag-atake sa pamamagitan ng mga kaduda-dudang dependency, bina-block ni Deno bilang default ang lahat ng pagtatangka na makakuha ng access sa system mula sa mga dependency at nagpapakita ng babala tungkol sa mga nakitang problema. Halimbawa, kapag sinubukan ng isang module na makakuha ng access sa pagsulat sa /usr/bin/, ipapakita ang isang kahilingan sa pagkumpirma para sa operasyong ito: deno run npm:install-malware ⚠️ ┌ Humihiling si Deno ng write access sa /usr/bin/. ├ Hiniling ng `install-malware` ├ Patakbuhin muli gamit ang --allow-write upang laktawan ang prompt na ito. └ Payagan? [y/n] (y = oo, payagan; n = hindi, tanggihan) >

Kabilang sa mga hindi-NPM na pagpapahusay sa bagong bersyon ang pag-update ng V8 engine upang ilabas ang 10.9, awtomatikong pag-detect ng mga file na may mga lock, pag-stabilize ng Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() at Deno API. .uid(), pagdaragdag ng bagong hindi matatag na API Deno.Command() para sa pagpapatakbo ng mga command (pangkalahatang kapalit para sa Deno.spawn, Deno.spawnSync at Deno.spawnChild).

Pangunahing tampok ng Deno:

  • Default na configuration na nakatuon sa seguridad. Ang pag-access sa file, networking, at pag-access sa mga variable ng kapaligiran ay hindi pinagana bilang default at dapat na tahasang pinagana. Ang mga application bilang default ay tumatakbo sa mga nakahiwalay na kapaligiran ng sandbox at hindi ma-access ang mga kakayahan ng system nang hindi nagbibigay ng mga tahasang pahintulot;
  • Built-in na suporta para sa TypeScript na lampas sa JavaScript. Para sa pagsusuri ng uri at pagbuo ng JavaScript, ginagamit ang karaniwang TypeScript compiler, na humahantong sa pagbaba sa pagganap kumpara sa pag-parse ng JavaScript sa V8;
  • Ang runtime ay dumating sa anyo ng isang solong self-contained na maipapatupad na file ("deno"). Upang magpatakbo ng mga application gamit ang Deno, kailangan mo lang mag-download ng isang executable na file para sa iyong platform, mga 30 MB ang laki, na walang mga panlabas na dependency at hindi nangangailangan ng anumang espesyal na pag-install sa system. Bukod dito, ang deno ay hindi isang monolitikong aplikasyon, ngunit isang koleksyon ng mga pakete ng Rust crate (deno_core, rusty_v8), na maaaring gamitin nang hiwalay;
  • Kapag sinimulan ang programa, pati na rin ang pag-load ng mga module, maaari mong gamitin ang URL addressing. Halimbawa, upang patakbuhin ang welcome.js program, maaari mong gamitin ang command na “deno https://deno.land/std/examples/welcome.js”. Ang code mula sa mga panlabas na mapagkukunan ay dina-download at naka-cache sa lokal na system, ngunit hindi kailanman awtomatikong na-update (ang pag-update ay nangangailangan ng tahasang pagpapatakbo ng application gamit ang flag na "--reload");
  • Mahusay na pagproseso ng mga kahilingan sa network sa pamamagitan ng HTTP sa mga aplikasyon, ang platform ay idinisenyo para sa paglikha ng mga aplikasyon ng network na may mataas na pagganap;
  • Ang kakayahang lumikha ng mga unibersal na web application na maaaring isagawa pareho sa Deno at sa isang regular na web browser;
  • Ang pagkakaroon ng isang karaniwang hanay ng mga module, ang paggamit nito ay hindi nangangailangan ng pagbubuklod sa mga panlabas na dependency. Ang mga module mula sa karaniwang koleksyon ay sumailalim sa karagdagang pag-audit at pagsubok sa pagiging tugma;
  • Bilang karagdagan sa runtime, gumaganap din ang Deno platform bilang manager ng package at nagbibigay-daan sa iyo na ma-access ang mga module sa pamamagitan ng URL sa loob ng code. Halimbawa, para mag-load ng module, maaari mong tukuyin sa code na “import * bilang log mula sa “https://deno.land/std/log/mod.ts”. Ang mga file na na-download mula sa mga panlabas na server sa pamamagitan ng URL ay naka-cache. Ang pagbubuklod sa mga bersyon ng module ay tinutukoy sa pamamagitan ng pagtukoy ng mga numero ng bersyon sa loob ng URL, halimbawa, “https://unpkg.com/[protektado ng email]/dist/liltest.js";
  • Kasama sa istruktura ang isang pinagsama-samang sistema ng inspeksyon ng dependency (ang utos na "deno info") at isang utility para sa pag-format ng code (deno fmt);
  • Ang lahat ng mga script ng application ay maaaring pagsamahin sa isang JavaScript file.

Pinagmulan: opennet.ru

Magdagdag ng komento