Opublikowano wydanie platformy Deno 2.0, przeznaczonej do izolowanego uruchamiania aplikacji serwerowych w językach JavaScript i TypeScript z użyciem silnika V8, stosowanego w przeglądarkach opartych na Chromium. Projekt Deno rozwija Ryan Dahl, twórca Node.js, w celu zapewnienia bardziej bezpiecznego środowiska i usunięcia błędów koncepcyjnych popełnionych w architekturze Node.js. W celu zwiększenia bezpieczeństwa, otoczka wokół silnika V8 została napisana w języku Rust, a do obsługi zapytań w trybie nienaładowanym wykorzystano platformę Tokio. Kod projektu jest udostępniany na licencji MIT. Wersje są dostępne dla systemów Linux, Windows i macOS.
Podczas przygotowania nowej gałęzi główną uwagę poświęcono zgodności ze starą infrastrukturą JavaScript oraz rozszerzeniu zakresu obsługiwanych projektów JavaScript bez uszczerbku dla zapewnienia bezpieczeństwa. Wśród zmian:
- Zrealizowano wsteczną zgodność z Node.js i npm, co pozwala na uruchamianie niemodyfikowanych aplikacji stworzonych dla Node.js. Wsparcie dla Node.js umożliwia także stopniowe przenoszenie istniejących projektów z Node.js na Deno lub podłączanie do projektów Deno zależności z NPM poprzez wskazanie specyfikatora „npm:” podczas importu pakietów w deno.json.
- Dodano wbudowane wsparcie dla pliku package.json oraz katalogu z modułami node_modules, które są używane w Node.js.
- Zapewniono wsparcie dla prywatnych repozytoriów NPM, określonych za pomocą plików „.npmrc”.
- Dodano wsparcie dla popularnych frameworków JavaScript, takich jak Next.js, Astro, Remix, Angular, SvelteKit i QwikCity.
- Dodano wsparcie dla przestrzeni roboczych npm (workspace) oraz monorepo, z oddzielnym przetwarzaniem zależności.
- Dodano nowe polecenia zarządzania pakietami: „deno install” do instalacji zależności, „deno add” do dodawania pakietów do package.json lub deno.json, „deno remove” do usuwania pakietów. Zauważono, że „deno install” działa około 15 razy szybciej niż npm w przypadku braku pakietów w pamięci podręcznej i o 90% szybciej przy dostępności pakietu w pamięci podręcznej (wsparcie zarówno dla node_modules, jak i własnej globalnej pamięci podręcznej).
- Stabilizowano standardową bibliotekę.
- Zapewniono długi cykl wsparcia (LTS).
- Wprowadzono JSR — repozytorium z bibliotekami JavaScript i TypeScript, które można wykorzystać w różnych czasach wykonania JavaScript.
- W poleceniu „deno fmt” pojawiła się możliwość formatowania treści w formatach HTML, CSS i YAML.
- Do zespołu „deno lint” dodano wsparcie dla reguł i poprawek specyficznych dla Node.js.
- W zespole „deno test” wprowadzono możliwość uruchamiania testów stworzonych z wykorzystaniem node:test.
- W zespole „deno task” wprowadzono wsparcie dla uruchamiania skryptów przez package.json.
- W zespole „deno compile” pojawiła się możliwość podpisania kodu cyfrowym podpisem.
- W zespole „deno serve” zrealizowano równoległe przetwarzanie operacji HTTP serwerów z wykorzystaniem wielu rdzeni CPU.
- W zespole „deno coverage” dodano wsparcie dla zapisywania raportów w formacie HTML.
- Przeprowadzono optymalizację wydajności.

Główne cechy Deno:
- Skoncentrowanie na bezpieczeństwie w konfiguracji domyślnej. Dostęp do plików, możliwości sieciowe i dostęp do zmiennych środowiskowych są domyślnie zablokowane i wymagają jawnego włączenia. Aplikacje domyślnie uruchamiane są w izolowanych środowiskach sandbox i nie mogą uzyskać dostępu do możliwości systemowych bez przyznania jawnych uprawnień;
- Wbudowane wsparcie dla języka TypeScript oprócz JavaScript. Do weryfikacji typów i generacji JavaScript wykorzystywany jest standardowy kompilator TypeScript, co prowadzi do spadku wydajności w porównaniu do analizy JavaScript w V8;
- Runtime dostarczane jest w formie jednego samowystarczalnego pliku wykonywalnego („deno”). Aby uruchomić aplikacje za pomocą Deno, wystarczy pobrać dla swojej platformy jeden plik wykonywalny o wielkości około 40 MB, który nie ma zewnętrznych zależności i nie wymaga specjalnej instalacji w systemie. Deno nie jest monolityczną aplikacją, ale kolekcją pakietów crate w Rust (deno_core, rusty_v8), które mogą być używane oddzielnie.
- Podczas uruchamiania programu, a także do ładowania modułów można użyć adresacji przez URL. Na przykład, aby uruchomić program welcome.js, można użyć polecenia „deno https://deno.land/std/examples/welcome.js”. Kod z zewnętrznych źródeł jest pobierany i buforowany na lokalnym systemie, ale nigdy nie jest automatycznie aktualizowany (aby go zaktualizować, należy wyraźnie uruchomić aplikację z flagą „—reload”);
- Skuteczna obsługa żądań sieciowych HTTP w aplikacjach, platforma jest zaprojektowana do tworzenia wysokowydajnych aplikacji sieciowych;
- Możliwość tworzenia uniwersalnych aplikacji webowych, które mogą działać zarówno w Deno, jak i w zwykłej przeglądarce internetowej;
- Posiadanie standardowego zestawu modułów, których użycie nie wymaga powiązania z zewnętrznymi zależnościami. Moduły ze standardowej kolekcji przeszły dodatkowy audyt i sprawdzenie na zgodność;
- Oprócz runtime platforma Deno pełni również rolę menedżera pakietów i pozwala na odwoływanie się do modułów w kodzie przez URL. Na przykład, aby załadować moduł, można w kodzie użyć „import * as log from "https://deno.land/std/log/mod.ts". Pliki pobrane z zewnętrznych serwerów URL są buforowane. Powiązania z wersjami modułów określane są poprzez wskazanie numerów wersji w URL, na przykład „https://unpkg.com/liltest@0.0.5/dist/liltest.js”;
- Orientacja na wykorzystanie standardów Web, wsparcie dla Promise, fetch i modułów ECMAScript.
- Kompatybilność z pakietami umieszczonymi w repozytorium NPM i stworzonymi dla platformy Node.js.
- W skład integracji wchodzi system inspekcji zależności (komenda „deno info”) oraz narzędzie do formatowania kodu (deno fmt);
- Wszystkie skrypty aplikacji mogą być łączone w jeden plik JavaScript.
Źródło: opennet.ru

