Denoの直近の変更について

直近でDeno v2.4向けと思われる機能がいくつかマージされているため、紹介します。

--unstable-raw-imports (DENO_UNSTABLE_RAW_IMPORTS)がサポート

Import Attributesにおいてtype: "bytes"及びtype: "text"の指定がサポートされています (#29855)。それぞれ、指定したファイルを文字列もしくはバイト (Uint8Array) 形式で読み込むために利用することができます:

import data from "./data.txt" with { type: "text" };

console.info(data); // => "foo"

この機能を有効化するためには、--unstable-raw-importsの指定が必要です:

$ deno run --unstable-raw-imports main.js

Deno.execPath()における--allow-readの指定が不要化

Deno.execPath()--allow-readを要求しないよう挙動が変更されています:

Deno.execPath()--allow-read=denoの要求を促すことで、ユーザーが allowlist を指定せずに--allow-readによってあらゆるファイルの読み込みを許可してしまうケースが多く、却ってセキュリティリスクを増してしまうとの判断からこの変更が実施されたようです。

deno updateコマンドが追加

deno updateコマンドが追加されています:

このコマンドの挙動は依存関係の更新のために利用することができます (実質的にdeno outdated --updateのエイリアスとして機能するようです)

deno fmt - .svg/.xml/.mustacheのサポート

deno fmtコマンドで.svg/.xml/.mustacheをサポートするPRがマージされています:

.mustacheファイルのフォーマットについては--unstable-componentの指定が必要なようです。

Deno v2.3.7

Deno v2.3.7がリリースされています。

deno bundleの改善

Deno v2.3.6で再実装されたdeno bundleコマンドで--watchオプションがサポートされています (#29795)。esbuildのプロセスを再起動することなく再ビルドが実行されます。

それ以外にも以下の改善が実施されています:

  • --sourcemapオプションが追加されています (#29735)
  • --platformオプションが追加されています (#29697)。browserもしくはdenoのいずれかを指定可能で、browserを指定するとpackage.jsonexportsにおいてbrowserで指定されたエントリーポイントが読み込まれます。
  • --allow-importがサポート (#29733)
  • import.meta.mainのサポート (#29830)
  • デフォルトで--unstable-sloppy-importsが有効化されるように挙動が変更されています (#29731)

deno install -g - @{scope}/cli形式のパッケージの取り扱いが改善

@{scope}/cli形式のパッケージに対してデフォルトでscopeが名前として扱われるよう改善されています (#29694)

具体的にはnpm:@slidev/cliのようなパッケージをdeno install -gでインストールすると、デフォルトでslidevという名前で利用できます。

deno outdatedのバグ修正

依存パッケージの新しいバージョンにおいてexportsから削除されたエントリが存在する場合に、deno outdatedが失敗する問題が修正されています (#29713)

--cert - Base64形式のサポート

base64:プレフィックスを指定 (--cert=base64:<base64-encoded-cert>)することで、Base64形式のルート証明書を読み込めるよう改善されています (#29814)

node:crypto

Certificateが実装されています (#29828)

また、publicEncrypt()及びprivateDecrypt()KeyObjectがサポートされています (#29798)

node:fs

fchmod()fchmodSync()が実装されています (#29791)

node:worker_threads

Deno v2.3.6におけるWorkerGlobalScopeに続いて、node:worker_threadsWorkerからはselfを参照できないよう修正されています (#29734)

Node-API

napi_add_finalizer()で登録したfinalize_cbが呼び出されることを保証するよう改善が実施されています (#29710)

import.meta.resolve()

import.meta.resolve()でnpmやjsrパッケージ中の存在しないファイルに対する解決がサポートされています (#29831, #29741)

LogTape 1.0.0

LogTape 1.0.0がリリースされています:

ログのバッファリングを有効化するためのnonBlockingオプションの追加やCloudWatch Logsのサポート (@logtape/cloudwatch-logs),ローカル開発向けの@logtape/prettyパッケージの追加などが実施されているようです。

また、既存のロガーとの統合を容易にするために@logtape/adaptor-pino@logtape/adaptor-winstonパッケージが追加されています。