Deno JavaScript-platformen er kompatibel med NPM-moduler

Deno 1.28 er blevet frigivet, en ramme til sandboxing af JavaScript og TypeScript-applikationer, der kan bruges til at oprette server-side-handlere. Platformen er udviklet af Ryan Dahl, skaberen af ​​Node.js. Ligesom Node.js bruger Deno V8 JavaScript-motoren, som også bruges i Chromium-baserede browsere. Samtidig er Deno ikke en forgrening af Node.js, men er et nyt projekt skabt fra bunden. Projektkoden distribueres under MIT-licensen. Builds er forberedt til Linux, Windows og macOS.

Deno-projektet blev oprettet for at give brugerne et mere sikkert miljø og eliminere konceptuelle fejl i Node.js-arkitekturen. For at forbedre sikkerheden er V8-motoren skrevet i Rust, hvilket undgår mange af de sårbarheder, der opstår ved manipulation af hukommelsen på lavt niveau. For at behandle anmodninger i en ikke-blokerende tilstand, bruges Tokio-platformen, også skrevet i Rust. Tokio giver dig mulighed for at skabe højtydende applikationer baseret på begivenhedsdrevet arkitektur, der understøtter multi-threading og behandling af netværksanmodninger i asynkron tilstand.

En vigtig ændring i den nye udgivelse er stabiliseringen af ​​kompatibilitet med pakker hostet i NPM-lageret, hvilket giver Deno mulighed for at bruge mere end 1.3 millioner moduler, der er oprettet til Node.js-platformen. For eksempel kan Deno-baserede applikationer nu bruge vedvarende dataadgangsmoduler som Prisma, Mongoose og MySQL, samt front-end-frameworks som React og Vue. Nogle NPM-moduler forbliver stadig inkompatible med Deno, for eksempel på grund af bindinger til Node.js-specifikke miljøelementer såsom filen package.json. Det er heller ikke endnu muligt at bruge kommandoen "deno compile" med NPM-moduler. Fremtidige udgivelser planlægger at løse disse inkompatibiliteter og begrænsninger.

Understøttelse af Denos tidligere brugte ECMAScript-modulsystem og Web API-model bibeholdes på samme niveau, og Denos velkendte URL-baserede indlæsningsskema bruges til at importere NPM-moduler. For at få adgang til NPM-moduler er der et særligt URL-præfiks "npm:", som kan bruges på samme måde som almindelige Deno-moduler. For at importere et NPM-modul kan du f.eks. angive 'import { chalk } from "npm:chalk@5";', og at køre et NPM-script fra kommandolinjen - "deno run --allow-env --allow -læs npm:create- vite-extra."

Det er meget nemmere at bruge NPM-pakker i Deno end i Node.js, da der ikke er behov for at forudinstallere moduler (moduler installeres, når applikationen startes første gang), der er ingen package.json-fil, og der er ingen standard node_modules mappe (moduler cachelagres i delt mappe, men det er muligt at returnere den gamle adfærd ved at bruge "--node-modules-dir" muligheden).

NPM-baserede applikationer bevarer muligheden for at bruge Denos adgangskontrol, isolering og sikkerhedsfølsomme avancerede funktioner. For at imødegå angreb gennem tvivlsomme afhængigheder blokerer Deno som standard alle forsøg på at få adgang til systemet fra afhængigheder og viser en advarsel om opdagede problemer. For eksempel, når et modul forsøger at få skriveadgang til /usr/bin/, vil en bekræftelsesanmodning for denne handling blive vist: deno run npm:install-malware ⚠️ ┌ Deno anmoder om skriveadgang til /usr/bin/. ├ Anmodet af `install-malware` ├ Kør igen med --allow-write for at omgå denne prompt. └ tillade? [y/n] (y = ja, tillad; n = nej, benægt) >

Ikke-NPM-forbedringer i den nye version inkluderer opdatering af V8-motoren til frigivelse 10.9, automatisk registrering af filer med låse, stabilisering af Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() og Deno API'er. .uid(), der tilføjer ny ustabil API Deno.Command() til at køre kommandoer (universel erstatning for Deno.spawn, Deno.spawnSync og Deno.spawnChild).

Hovedtræk ved Deno:

  • Sikkerhedsorienteret standardkonfiguration. Filadgang, netværk og adgang til miljøvariabler er deaktiveret som standard og skal udtrykkeligt aktiveres. Programmer kører som standard i isolerede sandkassemiljøer og kan ikke få adgang til systemfunktioner uden at give eksplicitte tilladelser;
  • Indbygget understøttelse af TypeScript ud over JavaScript. Til typekontrol og JavaScript-generering bruges standard TypeScript-kompileren, hvilket fører til et fald i ydeevnen sammenlignet med JavaScript-parsing i V8;
  • Runtime kommer i form af en enkelt selvstændig eksekverbar fil ("deno"). For at køre applikationer ved hjælp af Deno skal du blot downloade en eksekverbar fil til din platform, omkring 30 MB i størrelse, som ikke har nogen eksterne afhængigheder og ikke kræver nogen speciel installation på systemet. Desuden er deno ikke en monolitisk applikation, men er en samling af Rust-kassepakker (deno_core, rusty_v8), som kan bruges separat;
  • Når du starter programmet, samt til indlæsning af moduler, kan du bruge URL-adressering. For at køre programmet welcome.js kan du for eksempel bruge kommandoen "deno https://deno.land/std/examples/welcome.js". Kode fra eksterne ressourcer downloades og cachelagres på det lokale system, men opdateres aldrig automatisk (opdatering kræver eksplicit at køre programmet med flaget "--reload").
  • Effektiv behandling af netværksanmodninger via HTTP i applikationer, platformen er designet til at skabe højtydende netværksapplikationer;
  • Evnen til at skabe universelle webapplikationer, der kan udføres både i Deno og i en almindelig webbrowser;
  • Tilstedeværelsen af ​​et standardsæt af moduler, hvis brug ikke kræver binding til eksterne afhængigheder. Moduler fra standardsamlingen har gennemgået yderligere revision og kompatibilitetstest;
  • Ud over runtime fungerer Deno-platformen også som en pakkehåndtering og giver dig adgang til moduler via URL inde i koden. For at indlæse et modul kan du for eksempel angive i koden "import * som log fra "https://deno.land/std/log/mod.ts". Filer downloadet fra eksterne servere via URL cachelagres. Binding til modulversioner bestemmes ved at angive versionsnumre inde i URL'en, for eksempel "https://unpkg.com/[e-mail beskyttet]/dist/liltest.js";
  • Strukturen inkluderer et integreret afhængighedsinspektionssystem (“deno info”-kommandoen) og et værktøj til kodeformatering (deno fmt);
  • Alle applikationsscripts kan kombineres til én JavaScript-fil.

Kilde: opennet.ru

Tilføj en kommentar