Platforma JavaScript Deno jest kompatybilna z modułami NPM

Zostało wydane Deno 1.28, framework do piaskowania aplikacji JavaScript i TypeScript, którego można używać do tworzenia procedur obsługi po stronie serwera. Platforma została opracowana przez Ryana Dahla, twórcę Node.js. Podobnie jak Node.js, Deno korzysta z silnika JavaScript V8, który jest również używany w przeglądarkach opartych na Chromium. Jednocześnie Deno nie jest forkiem Node.js, ale nowym projektem stworzonym od podstaw. Kod projektu jest rozpowszechniany na licencji MIT. Buildy są przygotowane dla systemów Linux, Windows i macOS.

Projekt Deno powstał, aby zapewnić użytkownikom bezpieczniejsze środowisko i wyeliminować błędy koncepcyjne w architekturze Node.js. Aby poprawić bezpieczeństwo, silnik V8 został napisany w języku Rust, co pozwala uniknąć wielu luk wynikających z manipulacji pamięcią na niskim poziomie. Do przetwarzania żądań w trybie nieblokującym wykorzystywana jest platforma Tokio, również napisana w języku Rust. Tokio umożliwia tworzenie wysokowydajnych aplikacji opartych na architekturze sterowanej zdarzeniami, obsługujących wielowątkowość i przetwarzających żądania sieciowe w trybie asynchronicznym.

Kluczową zmianą w nowej wersji jest stabilizacja kompatybilności z pakietami hostowanymi w repozytorium NPM, co pozwala Deno na korzystanie z ponad 1.3 miliona modułów stworzonych dla platformy Node.js. Na przykład aplikacje oparte na Deno mogą teraz wykorzystywać moduły trwałego dostępu do danych, takie jak Prisma, Mongoose i MySQL, a także frameworki front-end, takie jak React i Vue. Niektóre moduły NPM w dalszym ciągu pozostają niekompatybilne z Deno, na przykład ze względu na powiązania z elementami środowiska specyficznymi dla Node.js, takimi jak plik package.json. Nie jest jeszcze możliwe użycie polecenia „deno kompilacja” z modułami NPM. W przyszłych wydaniach planuje się rozwiązać te niezgodności i ograniczenia.

Obsługa wcześniej używanego przez Deno systemu modułów ECMAScript i modelu Web API została zachowana na tym samym poziomie, a do importowania modułów NPM używany jest znany schemat ładowania Deno oparty na adresach URL. Aby uzyskać dostęp do modułów NPM, istnieje specjalny przedrostek adresu URL „npm:”, którego można używać w taki sam sposób, jak zwykłych modułów Deno. Na przykład, aby zaimportować moduł NPM, możesz określić 'import { kreda } z "npm:chalk@5";', a uruchomić skrypt NPM z wiersza poleceń - "deno run --allow-env --allow -przeczytaj npm:create-vite-extra.”

Korzystanie z pakietów NPM w Deno jest znacznie prostsze niż w Node.js, gdyż nie ma konieczności wstępnej instalacji modułów (moduły są instalowane przy pierwszym uruchomieniu aplikacji), nie ma pliku package.json, ani domyślnych modułów node_modules katalog (moduły są buforowane we współdzielonym katalogu, ale możliwe jest przywrócenie starego zachowania za pomocą opcji „--node-modules-dir”).

Aplikacje oparte na NPM zachowują możliwość korzystania z kontroli dostępu, izolacji i zaawansowanych możliwości Deno związanych z bezpieczeństwem. Aby odeprzeć ataki poprzez podejrzane zależności, Deno domyślnie blokuje wszelkie próby uzyskania dostępu do systemu z zależności i wyświetla ostrzeżenie o wykrytych problemach. Na przykład, gdy moduł będzie próbował uzyskać dostęp do zapisu w /usr/bin/, zostanie wyświetlona prośba o potwierdzenie tej operacji: deno run npm:install-malware ⚠️ ┌ Deno żąda dostępu do zapisu w /usr/bin/. ├ Żądane przez `install-malware` ├ Uruchom ponownie z opcją --allow-write, aby ominąć ten monit. └ Zezwolić? [t/n] (y = tak, zezwól; n = nie, odmów) >

Ulepszenia inne niż NPM w nowej wersji obejmują aktualizację silnika V8 do wersji 10.9, automatyczne wykrywanie plików z blokadami, stabilizację Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() i Deno APIs.uid(), dodanie nowego niestabilnego API Deno.Command() do uruchamiania poleceń (uniwersalny zamiennik Deno.spawn, Deno.spawnSync i Deno.spawnChild).

Główne cechy Deno:

  • Domyślna konfiguracja zorientowana na bezpieczeństwo. Dostęp do plików, sieć i dostęp do zmiennych środowiskowych są domyślnie wyłączone i muszą zostać jawnie włączone. Aplikacje domyślnie działają w izolowanych środowiskach piaskownicy i nie mogą uzyskać dostępu do możliwości systemu bez udzielenia wyraźnych uprawnień;
  • Wbudowana obsługa TypeScript poza JavaScriptem. Do sprawdzania typów i generowania JavaScript używany jest standardowy kompilator TypeScript, co prowadzi do spadku wydajności w porównaniu do parsowania JavaScript w V8;
  • Środowisko wykonawcze ma postać pojedynczego, samodzielnego pliku wykonywalnego („deno”). Aby uruchomić aplikacje za pomocą Deno, wystarczy pobrać jeden plik wykonywalny dla Twojej platformy o rozmiarze około 30 MB, który nie ma zewnętrznych zależności i nie wymaga żadnej specjalnej instalacji w systemie. Co więcej, deno nie jest aplikacją monolityczną, ale zbiorem pakietów skrzynek Rusta (deno_core, rusty_v8), których można używać osobno;
  • Podczas uruchamiania programu, jak również podczas ładowania modułów, można skorzystać z adresowania URL. Na przykład, aby uruchomić program Welcome.js, możesz użyć polecenia „deno https://deno.land/std/examples/welcome.js”. Kod z zasobów zewnętrznych jest pobierany i buforowany w systemie lokalnym, ale nigdy nie jest automatycznie aktualizowany (aktualizacja wymaga jawnego uruchomienia aplikacji z flagą „--reload”);
  • Efektywne przetwarzanie żądań sieciowych poprzez HTTP w aplikacjach, platforma przeznaczona jest do tworzenia wysokowydajnych aplikacji sieciowych;
  • Możliwość tworzenia uniwersalnych aplikacji internetowych, które można uruchomić zarówno w Deno, jak i w zwykłej przeglądarce internetowej;
  • Obecność standardowego zestawu modułów, których użycie nie wymaga wiązania z zewnętrznymi zależnościami. Moduły z kolekcji standardowej przeszły dodatkowy audyt i testy kompatybilności;
  • Oprócz środowiska wykonawczego platforma Deno pełni również funkcję menedżera pakietów i umożliwia dostęp do modułów poprzez adres URL znajdujący się w kodzie. Na przykład, aby załadować moduł, możesz określić w kodzie „import * jako dziennik z „https://deno.land/std/log/mod.ts”. Pliki pobrane z serwerów zewnętrznych za pośrednictwem adresu URL są buforowane. Powiązanie z wersjami modułów jest określane poprzez podanie numerów wersji w adresie URL, na przykład „https://unpkg.com/[email chroniony]/dist/liltest.js";
  • Struktura zawiera zintegrowany system kontroli zależności (polecenie „deno info”) oraz narzędzie do formatowania kodu (deno fmt);
  • Wszystkie skrypty aplikacji można połączyć w jeden plik JavaScript.

Źródło: opennet.ru

Dodaj komentarz