Jukwaa la Deno JavaScript linaoana na moduli za NPM

Deno 1.28 imetolewa, mfumo wa JavaScript ya sandbox na programu za TypeScript ambazo zinaweza kutumika kuunda vidhibiti vya upande wa seva. Jukwaa limetengenezwa na Ryan Dahl, muundaji wa Node.js. Kama vile Node.js, Deno hutumia injini ya JavaScript ya V8, ambayo inatumika pia katika vivinjari vinavyotegemea Chromium. Wakati huo huo, Deno sio uma wa Node.js, lakini ni mradi mpya iliyoundwa kutoka mwanzo. Nambari ya mradi inasambazwa chini ya leseni ya MIT. Majengo yameandaliwa kwa Linux, Windows na macOS.

Mradi wa Deno uliundwa ili kuwapa watumiaji mazingira salama zaidi na kuondoa makosa ya dhana katika usanifu wa Node.js. Ili kuboresha usalama, injini ya V8 imeandikwa kwa Rust, ambayo huepuka udhaifu mwingi unaotokana na udanganyifu wa kumbukumbu ya kiwango cha chini. Ili kushughulikia maombi katika hali isiyo ya kuzuia, jukwaa la Tokio, pia limeandikwa katika Rust, hutumiwa. Tokio hukuruhusu kuunda programu zenye utendakazi wa hali ya juu kulingana na usanifu unaoendeshwa na tukio, kusaidia utiririshaji na usindikaji maombi ya mtandao katika hali ya asynchronous.

Mabadiliko muhimu katika toleo jipya ni uimarishaji wa uoanifu na vifurushi vilivyopangishwa katika hazina ya NPM, ambayo inaruhusu Deno kutumia zaidi ya moduli milioni 1.3 iliyoundwa kwa ajili ya jukwaa la Node.js. Kwa mfano, programu zinazotegemea Deno sasa zinaweza kutumia moduli za ufikiaji wa data zinazoendelea kama vile Prisma, Mongoose na MySQL, pamoja na mifumo ya mbele kama vile React na Vue. Baadhi ya moduli za NPM bado hazioani na Deno, kwa mfano kutokana na kuunganishwa kwa vipengele vya mazingira mahususi vya Node.js kama vile faili ya package.json. Pia bado haiwezekani kutumia amri ya "deno compile" na moduli za NPM. Matoleo yajayo yanapanga kushughulikia kutopatana na mapungufu haya.

Usaidizi wa mfumo wa moduli wa ECMAScript uliotumika hapo awali wa Deno na muundo wa API ya Wavuti huhifadhiwa kwa kiwango sawa, na mpango wa upakiaji wa Deno unaotegemea URL hutumiwa kuleta moduli za NPM. Ili kufikia moduli za NPM, kuna kiambishi awali maalum cha URL "npm:", ambacho kinaweza kutumika kwa njia sawa na moduli za kawaida za Deno. Kwa mfano, kuleta moduli ya NPM, unaweza kubainisha 'import { chalk } kutoka "npm:chalk@5";', na kuendesha hati ya NPM kutoka kwa safu ya amri - "deno run --allow-env --allow -soma npm:create-vite-ziada.

Kutumia vifurushi vya NPM katika Deno ni rahisi zaidi kuliko katika Node.js, kwa kuwa hakuna haja ya kusakinisha moduli mapema (moduli husakinishwa wakati programu inapozinduliwa mara ya kwanza), hakuna faili ya package.json, na hakuna node_modules chaguo-msingi. saraka (moduli zimehifadhiwa kwenye saraka iliyoshirikiwa, lakini inawezekana kurudisha tabia ya zamani kwa kutumia chaguo la "--node-modules-dir").

Programu zinazotegemea NPM huhifadhi uwezo wa kutumia udhibiti wa ufikiaji wa Deno, utengaji na uwezo wa hali ya juu unaozingatia usalama. Ili kukabiliana na mashambulizi kupitia utegemezi unaotiliwa shaka, Deno huzuia kwa chaguo-msingi majaribio yote ya kufikia mfumo kutoka kwa vitegemezi na kuonyesha onyo kuhusu matatizo yaliyotambuliwa. Kwa mfano, sehemu inapojaribu kupata ufikiaji wa kuandika kwa /usr/bin/, ombi la uthibitishaji la operesheni hii litaonyeshwa: deno run npm:install-malware ⚠️ β”Œ Deno inaomba ufikiaji wa kuandika kwa /usr/bin/. β”œ Imeombwa na `install-malware` β”œ Endesha tena kwa --allow-write ili kukwepa kidokezo hiki. β”” Ruhusu? [y/n] (y = ndiyo, ruhusu; n = hapana, kataa) >

Maboresho yasiyo ya NPM katika toleo jipya ni pamoja na kusasisha injini ya V8 ili kutoa 10.9, utambuzi wa kiotomatiki wa faili zilizo na kufuli, uimarishaji wa Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() na API za Deno. .uid(), ikiongeza API mpya isiyo imara ya Deno.Command() ya kutekeleza amri (ubadilishaji wa Deno.spawn, Deno.spawnSync na Deno.spawnChild).

Vipengele kuu vya Deno:

  • Usanidi chaguo-msingi unaolenga usalama. Ufikiaji wa faili, uunganisho wa mtandao na ufikiaji wa anuwai za mazingira huzimwa kwa chaguo-msingi na lazima kuwezeshwa kwa uwazi. Programu kwa chaguo-msingi huendeshwa katika mazingira ya pekee ya kisanduku cha mchanga na haziwezi kufikia uwezo wa mfumo bila kutoa ruhusa zilizo wazi;
  • Usaidizi uliojengewa ndani wa TypeScript zaidi ya JavaScript. Kwa ukaguzi wa aina na kizazi cha JavaScript, mkusanyaji wa kawaida wa TypeScript hutumiwa, ambayo husababisha kushuka kwa utendaji ikilinganishwa na uchanganuzi wa JavaScript katika V8;
  • Runtime huja katika mfumo wa faili moja inayoweza kutekelezwa inayojitosheleza ("deno"). Ili kuendesha programu kwa kutumia Deno, unahitaji tu kupakua faili moja inayoweza kutekelezwa kwa jukwaa lako, kuhusu ukubwa wa MB 30, ambayo haina tegemezi za nje na hauhitaji usakinishaji wowote maalum kwenye mfumo. Zaidi ya hayo, deno sio maombi ya monolithic, lakini ni mkusanyiko wa vifurushi vya kutu ya kutu (deno_core, rusty_v8), ambayo inaweza kutumika tofauti;
  • Wakati wa kuanza programu, na pia kwa kupakia moduli, unaweza kutumia anwani ya URL. Kwa mfano, ili kuendesha programu ya welcome.js, unaweza kutumia amri "deno https://deno.land/std/examples/welcome.js". Msimbo kutoka kwa rasilimali za nje hupakuliwa na kuakibishwa kwenye mfumo wa ndani, lakini hausasishwi kiotomatiki (kusasisha kunahitaji kuendesha programu kwa uwazi na bendera ya "--reload");
  • Usindikaji bora wa maombi ya mtandao kupitia HTTP katika programu, jukwaa limeundwa kwa ajili ya kuunda programu za mtandao zenye utendaji wa juu;
  • Uwezo wa kuunda programu za wavuti za ulimwengu wote ambazo zinaweza kutekelezwa katika Deno na katika kivinjari cha kawaida cha wavuti;
  • Uwepo wa seti ya kawaida ya moduli, matumizi ambayo hauhitaji kumfunga kwa utegemezi wa nje. Moduli kutoka kwa mkusanyiko wa kawaida zimepitia ukaguzi wa ziada na upimaji wa ulinganifu;
  • Kando na wakati wa utekelezaji, jukwaa la Deno pia hufanya kazi kama kidhibiti kifurushi na hukuruhusu kufikia moduli kwa kutumia URL ndani ya msimbo. Kwa mfano, ili kupakia moduli, unaweza kubainisha katika msimbo "leta * kama kumbukumbu kutoka "https://deno.land/std/log/mod.ts". Faili zilizopakuliwa kutoka kwa seva za nje kupitia URL zimehifadhiwa. Kushurutishwa kwa matoleo ya sehemu hubainishwa kwa kubainisha nambari za matoleo ndani ya URL, kwa mfano, β€œhttps://unpkg.com/[barua pepe inalindwa]/dist/liltest.js";
  • Muundo unajumuisha mfumo wa ukaguzi wa utegemezi uliojumuishwa (amri ya "deno info") na matumizi ya umbizo la msimbo (deno fmt);
  • Hati zote za programu zinaweza kuunganishwa kuwa faili moja ya JavaScript.

Chanzo: opennet.ru

Kuongeza maoni