前書き
最終更新日 2020 年 8 月 16 日 deno @ a8f74aa
DenoはJavaScript / TypeScriptランタイムであり、安全なデフォルトと優れた開発者エクスペリエンスを備えています。
V8、Rust、Tokioに基づいて構築されています。
特徴
-
デフォルトでセキュアです。ファイル、ネットワーク、または環境変数へのアクセスをしません(明示的に有効にしない限り)。
-
TypeScriptがそのまま動作することをサポートしています。
-
単一のコマンドで実行が可能 (
deno
)。 -
依存関係の検査(
deno info
)やコードフォーマッター(deno fmt
)などの組み込みユーティリティがあります。 -
Denoで動作が保証されている一連のレビュー(監査)済みの標準モジュールがあります。
-
スクリプトは、単一のJavaScriptファイルにバンドルできます。
哲学
Denoは、モダンなプログラマーにとって生産的で安全なスクリプト環境を目指しています。
Denoは常に単一の実行形式ファイルとして配布されます。 DenoへのプログラムのURLを指定すると、15MB以下の圧縮された実行可能ファイルを実行できます。 Denoは、ランタイムとパッケージマネージャーの両方の役割を明示的に行います。モジュールのロードに標準のブラウザ互換プロトコルとして、URLを使用します。
とりわけ、Denoは、歴史的にbashまたはpythonで作成されたユーティリティスクリプトの優れた代替品です。
目標
-
単一の実行形式ファイルだけにする (
deno
)。 -
デフォルトでセキュアを提供する
- 特に許可されていない限り、スクリプトはファイル、環境、またはネットワークにアクセスできません。
-
ブラウザー互換性:JavaScriptで完全に記述され、グローバルな
Deno
名前空間(またはその機能テスト)を使用しなければ、変更なしで最新のWebブラウザーで実行できます。 -
ユニットテスト、コードフォーマット、リンターなどの組み込みツールを提供して、開発者のエクスペリエンスを向上させます。
-
V8の概念をユーザーランドまで拡げません。
-
効率的にHTTPを捌けます
Node.jsとの比較
-
Denoは
npm
を使用しません。- URLまたはファイルパスとして参照されたモジュールを使用します。
-
Denoは、モジュール解決アルゴリズムで
package.json
を使用しません。 -
Denoにおいて、すべての非同期アクションにはPromiseを返します。したがって、DenoはNodeとは異なるAPIを提供します。
-
Denoは、ファイル、ネットワーク、および環境へのアクセスに明示的なパーミッションを必要とします。
-
Denoは常にエラーがどこにもキャッチされないとき、終了します。
-
「ESモジュール」を使用し、
require()
をサポートしません。サードパーティのモジュールは、URLを介してインポートされます。import * as log from "https://deno.land/std@0.63.0/log/mod.ts";
その他の主要な行動
-
リモートのコードは最初の実行時にフェッチしたのちにキャッシュされ、そのコードは
--reload
フラグを使って実行されるまで更新されません。(したがって、飛行機でも機能します。) -
リモートURLからロードされたモジュール/ファイルは、不変的にキャッシュできることを目指しています。