Deno v1.26がリリースされました。
この記事では主な変更点などについて解説します。
--allow-sys
オプションの追加
Deno.osRelease
やDeno.systemMemoryInfo
などのシステム情報を取得するためのAPIの利用を制御するために、--allow-sys
オプションが追加されました。
$ deno run --unstable --allow-sys=osRelease,systemMemoryInfo main.js
元々、これらのAPIを使うには--allow-env
の指定が必要でした。
ただ、これらのAPIの利用に--allow-env
を要求することの副作用として、全ての環境変数にアクセスできるようになってしまうという問題がありました。
この問題を解決するため、--allow-sys
という新しいパーミッションが導入されました。
Cache APIのサポート
DenoにCache APIが実装されました。
const cache = await caches.open("v1");
const req = new Request("https://example.com/");
console.assert(await cache.match(req) === undefined);
const res = new Response("foobar");
await cache.put(req, res);
const cachedRes = await cache.match(req);
console.assert(await cachedRes?.text() === "foobar");
挙動について
localStorage
などと同様にSQLiteをベースに実装されており、利用する際は特にパーミッションなどは要求されません。
ただし、localStorage
とは異なり、DENO_DIR
ではなく/tmp/deno_cache
にSQLiteのデータベースやキャッシュされたコンテンツなどが保存されます。
制限
現時点では、いくつかの制限があるようです。
ignoreSearch
やignoreMethod
などのクエリオプションはまだサポートされてないようです。Cache.delete
を呼んだ際に、SQLiteデータベースに保存されたメタデータは削除されるものの、キャッシュされたコンテンツは削除されないようです。
npmパッケージサポートの改善
今回のv1.26のリリースでは、--no-npm
オプションが実装されています。
これにより、npm:
によるnpmパッケージのimport
を無効化できます。
$ deno run --no-npm main.ts
また、Denoでnpmパッケージのimport
がサポートされたことにより、Deno v1.25.2でNode.js互換モードが削除されています。
--compat
は動かなくなっているためご注意ください
$ deno run --compat --unstable main.mjs
上記以外にも、様々な改善が行われています。
例)
deno info
でnpmパッケージのキャッシュ場所が表示されるようになりました (v1.26.0)--node-modules-dir
オプションのサポート (v1.25.4)- Viteなどの
node_modules
ディレクトリに依存したパッケージを動かすための機能です。
- Viteなどの
--reload=npm:
によるnpmパッケージの再読込のサポート (v1.25.4)
unstable APIの有効化について
今まで利用に--unstable
が必要であった以下のAPIが安定化されています。
また、Deno.setRaw()
がDeno.stdin.setRaw()
へ移動しています。このDeno.stdin.setRaw()
は、次のv1.27での安定化が予定されているようです。
また、Deno v1.25で実装されたDeno.serve()
についてもv1.27で安定化が予定されているようです。
Deno.serve()
でSO_REUSEPORT
がサポート
Deno v1.25で実装されたDeno.serve()
でreusePort
オプションがサポートされています。
このオプションにtrue
を指定すると、SO_REUSEPORT
オプションが有効化されます (Linuxのみ)
パフォーマンスチューニング
このリリースでも、様々なパフォーマンスチューニングが実施されています。
TextEncoder#encodeInto()
が小さなデータに対しては5倍近く高速化、大きなデータに対しては30倍近く高速化されたようです。URL
オブジェクトにおけるクエリ文字列を持たないURLの解析が2倍、クエリ文字列を持ったURLは1.3倍まで高速化されたようです。console.log
が小さなデータに対して5倍程高速化されたようです。- ファイルシステム関連の各APIが高速化されています。
UI改善
deno lint
に--compact
オプションが追加されています。
これを指定すると、実行結果が簡略化された形式で表示されます。
$ deno lint --compact
/home/uki00a/sandbox/a.ts: line 5, col 11 - Empty block statement (no-empty)
/home/uki00a/sandbox/b.ts: line 11, col 4 - `mode` is never used (no-unused-vars)
Found 2 problems
Checked 2 files
また、その他にも以下のような改善が行われています。
- パーミッションプロンプトの改善
- パッケージダウンロードの進捗が表示されるように
deno repl
でCtrl+Cを連続で押すとREPLが停止するように
TypeScript v4.8
Deno内部のTypeScriptがv4.8にアップデートされています。
その他の変更点
- Crypto APIでX25519とEd25519がサポートされました (Secure Curves in the Web Cryptography API)
- JSON Moduleが
import
されているとdeno vendor
が動作しない問題が修正されています Proxy
でラップされたDate
オブジェクトをconsole.log
などで表示しようとすると、エラーが発生する問題が修正されています。