Spis treści

Deno

dinozaur

Deno

W tym wpisie chcę zebrać informcje dotyczące Deno, napisać, co w tym projekcie jest szczególnego, czym różni się od NodeJS i jak wygląda jego otoczenie (zarówno “narzędziowe “jak i “społeczne”). Zapraszam!

Co to jest Deno?

“Deno to proste, bezpieczne i nowoczesne środowisko uruchomieniowe dla języków JavaScripr i TypeScript, używające V8 i napisane w języku Rust.” - tak przedstawia się projekt Deno na swojej stronie deno.land.

Projekt ten rozpoczął Ryan Dahl, twórca NodeJS, który w tym filmie wyjaśnia, jakie decyzje podjęte przy tworzeniu Node-a okazały się później problematyczne. Jak na programistę przystało, podjął próbę zrobienia “lepszego Node” (Deno to anagram Node).

Projekt jest tym bardziej sexi, że jest napisany w Ruście. To repozytorium Deno na GitHubie oraz cały denoland.

Bezpieczeństwo

Procesy uruchamiane przy użyciu Deno nie mają dostępu do systemu plików, sieci ani zmiennych środowiskowych, chyba że takie uprawnienia zostaną jawnie przyznane.

Na przykład, aby umożliwić odczyt pliku z katalogu /usr, należy uruchomić skrypt z opcją --alow-read=/usr:

1
deno run --allow-read=/usr https://deno.land/std@0.95.0/examples/cat.ts /etc/passwd

Patrz: Ryan Dahl: The Deno security model

Uprawnienia, które można nadać procesowi Deno to:

  • --allow-env - pozwala odczytywać i zapisywać zmienne środowiskowe
  • --allow-hrtime - daje dostęp do pomiarów czasu w wyokiej “rozdzielczości”
  • --allow-net = [domains…] - umożliwia dostęp do sieci; opcjonalna lista ogranicza dostęp wyłącznie do podanych domen
  • --allow-read = [dirs…], –allow-write=[dirs…] - daje dostęp do czytania/pisania do systemu plików; opcjonalna lista pozwala ograniczyć czytanie/pisanie do wskazanej listy katalogów
  • --allow-run - pozwala uruchamiać podprocesy (uwaga, restrykcje nie dotyczą procesów potomnych)

Isnieje wystarczająco dużo powodów do tego, aby przyznać (gdyby ktoś miał jeszcze jakieś wątpliwości), że należy trzymać się starej, dobrej zasady bezpieczeństwa: zabronić wszystkiego, a pozwalać jedynie na to, co konieczne.

TypeScript

Domyślnie Deno uruchamia programy napisane w TypeScript. Nie jest potrzebna żadna dodatkowa konfiguraacja.

Rozdział Using TypeScript w Manualu opisuje konfigurację, sposób deklaracji typów, migrację do/z JavaScript.

Jedna binarka

Deno jest dystrybuowany/instalowany jako jeden plik wykonywalny. Działa na Macu, Windowsie, Linuksie.

Narzędzia

Posiada wbudowane narzędzia:

Biblioteka standardowa

Posiada zestaw sprawdzonych (przejrzanych w procesie audytu) standardowych modułów.

** System modułów**

Deno może zaimportować moduły z dowolnego położenia w sieci: z GitHuba, osobistego serwera czy z serwerów CDN: Skypack, jspm.io, jsDelivr czy esm.sh.

Dzięki temu autorzy modułów mogą hostować je niezależnie od centralnego rejestry npm.

Deno keszuje zaimportowane (czyli ściągnięte lokalnie) moduły i używa wersji z dysku, chyba że program zostanie uruchomiony z opcją --reload. Każdy z projektów używających tej samej wersji modułu korzysta z jednej kopii tego modułu.

Mapa importów

Aby ułatwić pracę z URL-ami, Deno oferuje możliwość utworzenia mapy importów (pliku JSON, w którym opisujemy, pod jaką nazwą ma być dostępny moduł), np. w pliku import_map.json:

1
2
3
4
5
{
"imports": {
"foo": "https://foo.com/package/"
}
}

i uruchomienia programu (np. main.ts):

1
import { TestModule } from "foo/test.ts";

z opcją --importmap=import_map.json:

1
deno run --importmap=import_map.json main.ts

Wszędzie Promises

Deno używa domyślnie Promise do zaimplementowania operacji asynchronicznych oraz umożliwia użycie składni await w zakresie globalnym (global scope). W Node możliwość ta istnieje od wersji 14:

1
2
3
4
5
6
7
// read-file.ts - Deno
try {
const data = await Deno.readFile('README.md');
// Handle the data
} catch (e) {
// Handle the error
}

Instalacja

Dla tych, którzy używają Rusta:

1
$ cargo install deno --locked

Dla pozostałych:

1
curl -fsSL https://deno.land/x/install/install.sh | sh

Dokumentacja

Core

Dokumentacja Deno to przede wszystkim:

Moduły zewnętrzne

  • Moduły, które działają z Deno, są hostowane na deno.land/x
  • Dokumentacja modułów jest generowana automatycznie i dostępna na doc.deno.land

Czy Deno jest konkurencją dla Node?

Jeszcze nie. NodeJS jest sprawdzony w produkcji, stabilny i z pewnością pozostanie jeszcze jakiś czas domyślnym runtimem JavaScript. Deno to projekt nowy, została ledwo wydana jego pierwsza wersja.

Zresztą, celem Deno nie jest zastąpienie Node, lecz zaoferowanie alternatywy. Dla programistów Deno zachowanie kompatybilności z Node nie stanowi wielkiego priorytetu - autorzy pakietów muszą sami zmigrować swój kod tak, aby był kompatybilny z Deno.

Strony