Deno 1.19の新機能は何ですか?
Deno 1.19は2022年2月に、設計段階からセキュアなJavaScriptランタイムの最新のインクリメンタルアップデートとしてリリースされました。変更点には、効率的な権限管理体験、ベンダー依存関係のファーストクラスサポート、ファイル、ネットワークソケット、および標準入出力のための新しいネイティブウェブストリームが含まれています。
この記事では、Denoの使用方法を変える主要な追加機能と改善点について見ていきます。リリースの詳細は、Denoブログの変更履歴から確認できます。
許可のプロンプト
Denoの主な目的の一つは、Node.jsなどの代替手段よりもより安全なJavaScript環境を提供することです。その厳格な権限モデルは、ユーザーが明示的にアクセスを許可しない限り、プログラムがネットワーク、ファイルシステム、ホスト環境などの機能にアクセスすることを防ぎます。
以前のDenoバージョンでは、以下のようなコマンドラインフラグを指定する必要がありました。
--allow-net
(ネットワーキングを許可する) と
--allow-read(ファイルシステム読み取りを許可) これらの権限を付与するための。
--promptフラグが代替案として提供され、各権限をインタラクティブなCLIプロンプトとして列挙し、あなたに答えてもらうようになっています。
yまたは
nへ
Deno v1.19では、
--prompt特定のものを省略すると、フラグは自動的に含まれます。
--allow-オプション。これにより、複数の権限を必要とするアプリケーションを素早く起動できるようになります。それらを個別に覚えたり、指定したりする必要はありません。
--prompt毎回。
あなたはそれを使用できます
--no-prompt
インタラクティブな権限プロンプトを完全に無効にするフラグ。このモードは、DenoがTTYなしで実行されているときのデフォルトモードとして残ります。
ネイティブウェブストリーム
Denoは今やネイティブを使用しています。
ReadableStreamそして
WritableStreamファイル、ネットワーキング、標準入出力ストリームのインスタンス。これらの機能のためにウェブストリームを採用することで、API間およびウェブブラウザなどの他のランタイム間の相互運用性が向上します。例えば、ネットワークデータを直接ファイルまたは標準出力にストリーミングすることができます:
const file = await Deno.create("./data.txt");
const networkResponse = await fetch("https://example.com/data.txt");
await networkResponse.body.pipeTo(file.writable);
各ストリームの
readableと
writableプロパティはウェブストリームインスタンスを指します。これらはサポートAPI間で自由に渡すことができ、複雑な非同期コードを明確で読みやすくします。ウェブストリームの使用はDenoのサーバーコンポーネントにも拡張されており、ストリームデータをHTTPレスポンスにパイプすることができます。
シンプルストリーム圧縮
ストリームには新しいトランスフォーマーが2つ追加されました。
CompressionStream
そして
DecompressionStreamこれにより、ストリームを通るデータの圧縮と解凍が簡素化されます。Denoは、すでにChromeとOperaで動作している標準化されたAPIを実装しました。他のブラウザも将来的にサポートを追加することが期待されています。
const decompressed = await Deno.open("./file.txt");
const compressed = await Deno.open("./file.txt.gz");
await decompressed.readable
.pipeThrough(new CompressionStream("gz"))
.pipeTo(compressed.writable);
トランスフォーマーは現在サポートしています
gzipそして
deflate-形式化データ。APIを拡張するためのオープンなコミュニティ提案があります
brotli圧縮も。
委託された依存関係
リリースの大きな新機能は、ベンダー依存関係です。Denoは、依存関係を自分のソースコードの一部としてベンダリングするためのメカニズムを提供します。これにより、コミットするという面倒な回避策が取り除かれました。
DENO_DIR外部モジュールによって提供されたファイルに変更を加えるためだけに、あなたのリポジトリに追加します。
ベンダー依存関係は、DenoにNode.jsに似たものを提供します。
node_modulesディレクトリ。モジュールをベンダリングすると、不透明なファイルが変換されます。
DENO_DIR元のモジュール名に似たファイル名を持つディスク上の依存関係ツリーに入れます。
新しい
deno vendorコマンドは指定されたモジュールのリモート依存関係をローカルのvendorディレクトリにダウンロードします:
deno vendor main.tsディレクトリには、ソースを実行する際に Deno の --import-map フラグに渡すことができる import_map.json が含まれます。これにより、Deno はダウンロードしたモジュールを使用して依存関係を解決するように指示されます。--no-remote フラグを追加すると、リモートモジュールの読み込みが完全に無効になり、ベンダーされた依存関係が例外なく使用されることが保証されます。
deno run --no-remote --import-map=vendor/import_map.json main.tsこの機能の良いユースケースは、ベンダーコードを自分のソースと一緒に配布したい場合です。また、依存関係にいくつかのログ文を挿入する必要があるときのデバッグにも便利です。ターゲットモジュールをベンダー化すると、そのソースファイルを便利にブラウズして編集できます。作業が終わったら、vendorディレクトリを削除して、通常のモジュール読み込みシステムに戻します。
改善された開発体験
その他の新しい改善は、開発者の体験とDenoのデバッグツールを向上させます。以下は、あなたが恩恵を受けることができるいくつかの変更です:
- より信頼性の高いコンパイル -
deno compileコマンドは、依存関係グラフを最終的なバイナリに直接シリアライズします。これにより、古い Deno バージョンで使用されていたバンドルステップが削除され、コードの実行順序が正しく保たれます。コンパイルされたバイナリは、より予測可能に振る舞い、deno runと一貫性があるはずです。 - console.logにおける循環参照 - 循環参照を含むオブジェクトは、
console.logの出力において明確に表示されるようになりました。各参照には、対象オブジェクトのインジケーターと現在のイテレーションのサークルカウントが含まれています。 - 簡単にカバレッジレポートを保存 -
deno coverageレポートには、出力をファイルに直接送信するために使用できる--outputフラグが追加されました(deno coverage --lcov --output=coverage.lcov coverage/)。以前は、シェルのリダイレクションを使ってコマンドの標準出力を手動でファイルにパイプする必要がありました。 - ファイルウォッチャーコンソールクリアの無効化 - Denoの
--watchフラグは、実行中のプロセスが再起動するたびにコンソールをクリアするようになっていました。この動作は、--no-clear-screenフラグを使用することで無効化できます。このフラグを使用することで、ファイルが変更された後でもコンソール出力を保持できます。 - デノの
Deno.FileAPIの曖昧さの軽減 -Deno.Fileは標準化されたFileウェブ APIとの混乱を避けるためにDeno.FsFileになりました。ローカルファイルシステムリソースにアクセスしていることを明示的にするために、Deno.Fileの参照を新しいバリアントに更新するべきです。Deno.Fileは、デノ v2 まで非推奨の警告付きで引き続き使用可能です。
新しい不安定なAPIもあり、実行中のプロセスのシステムユーザーIDを取得し、利用可能なネットワークインターフェースを発見することができます。既存の不安定なUnixソケットAPIは、HTTPコンテンツの提供に使用できるようになりました。最後に、SIGINTやSIGTERMなどのシステム信号にサブスクライブするためのシグナルリスナーAPIが安定版に昇格しました。
アップグレード
新しいリリースにアップグレードするには、deno upgrade コマンドを実行します。これにより、自動的に最新バージョンがダウンロードされ、解凍され、現在のDenoインストールが上書きされます。必要に応じて、deno upgrade --version 1.18.2 を使用してv1.18にロールバックできます。
要約
Deno v1.19は、JavaScriptおよびTypeScriptランタイムにとって別の健全なリリースです。ストリーム処理からdenoコマンドラインユーティリティまで、開発体験のいくつかの側面を簡素化します。
このリリースでは、V8ランタイムが9.9にアップグレードされます。これにより、Intl.Localeオブジェクトのプロパティが追加され、特定のコンポーネントが利用可能かどうかを確認するためのIntel.supportedValuesOf()関数が新たに追加されました。これらの機能をDenoプログラムで使用できるようになりました。
