Deno v2.2.5

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

npmパッケージに対するパッチが実験的にサポート

⚠️Deno v2.3がリリースされるまでは、この機能の利用には"unstable": ["npm-patch"]の指定が必要なようです。今後、破壊的変更が加わる可能性もありそうです。

deno.jsonpatchフィールドによるnpmパッケージへのパッチがサポートされています (#28512)

この機能を利用するためにはnode_modulesが必要なため"nodeModulesDir": "manual""nodeModulesDir": "auto"などとの併用が必要なようです。

使い方はjsrパッケージにおけるパッチと同様で、patchフィールドにpackage.jsonを持つディレクトリへのパスを指定することで、該当のpackage.json"name"フィールドの値に一致するパッケージがpatchフィールドで指定されたディレクトリの内容へ置き換えられます:

{
  "nodeModulesDir": "auto",
  "patch": ["./path/to/patched-npm-package"],
  "unstable": ["npm-patch"]
}

このnpmパッケージのパッチ機能はnodeModulesDirの設定値によって振る舞いが若干変わるようです:

nodeModulesDir振る舞い
"manual"パッチの内容を変更するたびにdeno installの実行が要求されるようです
"auto"スクリプト実行のたびにnode_modulesが作り直されるため、起動時間が少し伸びるようです

OpenTelemetry

Span Eventsのサポート

Span Eventsの基本的なサポートが実施されています (#28552)

これによって、Span#addEventが利用できるようです。

意図せぬTypeErrorの修正

OpenTelemetryサポートを利用する際にTypeErrorが発生することがある問題が修正されています (#28538)

Node.js互換性の改善

node:sqlite

Denoのパーミッションシステムとの兼ね合いを考慮して、ATTACH DATABASEの使用が無効化されました (#28513)

また、StatementSync#runから返却されるchangesフィールドに誤った値が設定される問題が修正されています (#28506)

node:util

getCallSites()が実装されています (#28546)

その他

Deno本体のV8が135へアップデートされています (#28562)

また、Error.stackTraceLimitの型定義が追加されています (#28539)

静的解析可能なdynamic importに対する遅延読み込みのサポートについて (--unstable-lazy-dynamic-imports)

⚠️まだマージされていない機能であるため、今後、使い方などが変わる可能性があります。

Deno本体に静的に解析可能なdynamic import (import())の遅延読み込みをサポートするPRが作成されています:

例えば、以下のようなコードを実行する際に、通常であれば、まずはjsr:@std/fsがダウンロードされてから"foo""bar"が順番に出力されます:

console.info("foo");
const fs = await import("jsr:@std/fs");
console.info("bar");

この機能が有効化された場合、まず"foo"が出力された後にjsr:@std/fsのダウンロードと読み込みが行われ、その後に"bar"が出力されるよう挙動が変わるようです。

この機能を利用すると依存関係の解決順序が変わる関係で、通常時とは依存解決の振る舞いが若干変わる可能性があるようです。

この機能の利用には、--unstable-lazy-dynamic-importsまたはdeno.jsonにおいて"unstable": ["unstable-lazy-dynamic-imports"]の指定が必要なようです。