It Deno JavaScript-platfoarm is kompatibel mei NPM-modules

Deno 1.28 is frijlitten, in ramt foar sandboxing fan JavaScript en TypeScript-applikaasjes dy't kinne wurde brûkt om server-side handlers te meitsjen. It platfoarm is ûntwikkele troch Ryan Dahl, de skepper fan Node.js. Lykas Node.js brûkt Deno de V8 JavaScript-motor, dy't ek brûkt wurdt yn Chromium-basearre browsers. Tagelyk is Deno gjin foarke fan Node.js, mar is in nij projekt makke fanôf scratch. De projektkoade wurdt ferspraat ûnder de MIT-lisinsje. Builds wurde taret foar Linux, Windows en macOS.

It Deno-projekt is makke om brûkers in feiliger omjouwing te jaan en konseptuele flaters yn 'e Node.js-arsjitektuer te eliminearjen. Om feiligens te ferbetterjen is de V8-motor skreaun yn Rust, dy't in protte fan 'e kwetsberens foarkomt dy't ûntsteane út manipulaasje fan leech-nivo ûnthâld. Om fersiken te ferwurkjen yn in net-blokkearjende modus, wurdt it Tokio-platfoarm, ek skreaun yn Rust, brûkt. Tokio lit jo applikaasjes mei hege prestaasjes meitsje op basis fan evenemint-oandreaune arsjitektuer, stipe foar multi-threading en ferwurkjen fan netwurkoanfragen yn asynchrone modus.

In wichtige feroaring yn 'e nije release is de stabilisaasje fan kompatibiliteit mei pakketten dy't yn' e NPM-repository bewarre wurde, wêrtroch Deno mear as 1.3 miljoen modules kin brûke dy't makke binne foar it Node.js-platfoarm. Bygelyks, Deno-basearre applikaasjes kinne no persistente data-tagongsmodules brûke lykas Prisma, Mongoose en MySQL, lykas front-end frameworks lykas React en Vue. Guon NPM-modules bliuwe noch ynkompatibel mei Deno, bygelyks troch bindingen oan Node.js-spesifike omjouwings-eleminten lykas de package.json-bestân. It is ek noch net mooglik om it kommando "deno compile" te brûken mei NPM-modules. Takomstige releases plan om dizze ynkompatibiliteiten en beheiningen oan te pakken.

Stipe foar Deno's earder brûkte ECMAScript-modulesysteem en Web API-model wurdt bewarre op itselde nivo, en Deno's bekende URL-basearre ladenskema wurdt brûkt om NPM-modules te ymportearjen. Om tagong te krijen ta NPM-modules, is d'r in spesjale URL-foarheaksel "npm:", dat kin brûkt wurde op deselde wize as gewoane Deno-modules. Om bygelyks in NPM-module te ymportearjen, kinne jo 'ymportearje { krijt } fan "npm:chalk@5";' opjaan, en in NPM-skript út te fieren fan 'e kommandorigel - "deno run --allow-env --allow -lês npm:create- vite-extra."

It brûken fan NPM-pakketten yn Deno is folle makliker as yn Node.js, om't d'r gjin need is om modules foar te ynstallearjen (modules wurde ynstalleare as de applikaasje foar it earst wurdt lansearre), d'r is gjin package.json-bestân, en d'r is gjin standert node_modules directory (modules wurde yn 'e dielde map bewarre, mar it is mooglik om it âlde gedrach werom te jaan mei de opsje "--node-modules-dir").

NPM-basearre applikaasjes behâlde de mooglikheid om Deno's tagongskontrôle, isolaasje en feiligensgefoelige avansearre mooglikheden te brûken. Om oanfallen troch twifele ôfhinklikens tsjin te gean, blokkearret Deno standert alle besykjen om tagong te krijen ta it systeem fan ôfhinklikens en toant in warskôging oer ûntdutsen problemen. Bygelyks, as in module besiket skriuwtagong te krijen ta /usr/bin/, sil in befêstigingsfersyk foar dizze operaasje werjûn wurde: deno run npm:install-malware ⚠️ ┌ Deno freget skriuwtagong nei /usr/bin/. ├ Oanfrege troch `install-malware` ├ Op 'e nij útfiere mei --allow-write om dizze prompt te omgean. └ Tastean? [y/n] (y = ja, tastean; n = nee, wegerje) >

Non-NPM ferbetterings yn 'e nije ferzje omfetsje it bywurkjen fan de V8-motor om 10.9 frij te litten, automatyske deteksje fan bestannen mei slûzen, stabilisaasje fan 'e Deno.bench (), Deno.gid (), Deno.networkInterfaces (), Deno.systemMemoryInfo () en Deno APIs. .uid (), it tafoegjen fan nije ynstabyl API Deno.Command () foar it útfieren fan kommando's (universele ferfanging foar Deno.spawn, Deno.spawnSync en Deno.spawnChild).

Haadfunksjes fan Deno:

  • Feiligens-rjochte standert konfiguraasje. Triemtagong, netwurking en tagong ta omjouwingsfariabelen binne standert útskeakele en moatte eksplisyt ynskeakele wurde. Applikaasjes rinne standert yn isolearre sânbox-omjouwings en kinne gjin tagong krije ta systeemmooglikheden sûnder eksplisite tastimmingen te jaan;
  • Ynboude stipe foar TypeScript bûten JavaScript. Foar typekontrôle en JavaScript-generaasje wurdt de standert TypeScript-kompilator brûkt, wat liedt ta in drop yn prestaasjes yn ferliking mei JavaScript-parsing yn V8;
  • Runtime komt yn 'e foarm fan in inkeld selsstannich útfierber bestân ("deno"). Om applikaasjes út te fieren mei Deno, moatte jo gewoan ien útfierber bestân downloade foar jo platfoarm, sawat 30 MB yn grutte, dat gjin eksterne ôfhinklikens hat en gjin spesjale ynstallaasje op it systeem fereasket. Boppedat, deno is gjin monolithic applikaasje, mar is in kolleksje fan Rust krat pakketten (deno_core, rusty_v8), dat kin brûkt wurde apart;
  • By it starten fan it programma, lykas by it laden fan modules, kinne jo URL-adressering brûke. Om bygelyks it programma welcome.js út te fieren, kinne jo it kommando brûke "deno https://deno.land/std/examples/welcome.js". Koade fan eksterne boarnen wurdt ynladen en cache op it lokale systeem, mar wurdt nea automatysk bywurke (bywurkjen fereasket eksplisyt it útfieren fan de applikaasje mei de "--reload" flagge);
  • Effisjinte ferwurking fan netwurkoanfragen fia HTTP yn applikaasjes; it platfoarm is ûntworpen foar it meitsjen fan hege prestaasjes netwurkapplikaasjes;
  • De mooglikheid om universele webapplikaasjes te meitsjen dy't sawol yn Deno as yn in gewoane webblêder kinne wurde útfierd;
  • De oanwêzigens fan in standert set fan modules, it brûken fan dat net nedich bining oan eksterne ôfhinklikens. Modules út de standert kolleksje hawwe ûndergien ekstra kontrôle en komptabiliteit testen;
  • Neist runtime fungearret it Deno-platfoarm ek as pakketbehearder en lit jo tagong krije ta modules troch URL binnen de koade. Bygelyks, om in module te laden, kinne jo yn 'e koade "ymportearje * as log fan" https://deno.land/std/log/mod.ts oantsjutte. Triemmen ynladen fan eksterne tsjinners fia URL binne yn it cache. Bining oan moduleferzjes wurdt bepaald troch it opjaan fan ferzjenûmers binnen de URL, bygelyks "https://unpkg.com/[e-post beskerme]/dist/liltest.js";
  • De struktuer omfettet in yntegreare ôfhinklikheidsynspeksjesysteem (it kommando "deno info") en in nut foar koade opmaak (deno fmt);
  • Alle tapassingsskripts kinne wurde kombinearre yn ien JavaScript-bestân.

Boarne: opennet.ru

Add a comment