Deno v2.0.1/v2.0.2
Denoのv2.0.1とv2.0.2がリリースされています:
Node.js互換性の改善
CommonJSサポートの改善やWrangler/SvelteKit/Next.jsなどに関するサポートの改善が行われています。
--unstable-detect-cjs
--unstable-detect-cjsという新しいオプションが追加されています (deno.jsonで"unstable": ["detect-cjs"]を指定して有効化することも可能です)
このオプションを指定すると、package.jsonで"type": commonjsが指定されたパッケージの.jsファイルが.cjsファイル(CommonJS形式)として認識されます。
node:net: Socket#setNoDelayが実装
新規APIとしてSocket#setNoDelayが実装されました。
このAPIによってnode-postgresなどのパフォーマンスの改善が期待されるようです。
node:child_process: fork()での--no-warningsのサポート
fork()のexecArgvオプションでNode.jsの--no-warningsがサポートされています (Denoの--quietオプションにマッピングされます)
Wranglerを動作させるための対応のようです。
node:dns: lookup()の互換性の改善
lookup()でlocalhostを解決する際の振る舞いがNode.jsと一致するよう挙動が改善されています。
node:process
(Windows) 未サポートのシグナルの取り扱いの変更
Windowsにおいて未サポートのシグナルに対して警告を発するのではなく、単純に無視されるように振る舞いが変更されています。パッケージによっては多くの警告が出てしまうこともあったようです。
process.stdout.isTTYへの書き込みがサポート
vite-plugin-checkerがこの挙動に依存していたようです
node:util: styleTextが公開
styleTextが実装はされていたもののexportされていなかったので、ユーザーが利用できるよう改めてexportされています。
node:fs: copyFile()のバグ修正
copyFile()のmode引数にconstants.COPYFILE_EXCLが指定された際に、宛先のファイルが存在しないとエラーが発生する問題が修正されています (Next.jsのStatic Exportsでエラーが発生してしまっていたようです)
node:http: ServerResponseでのヘッダーの正規化
setHeader()でヘッダーを設定する際に、正規化された状態でヘッダーが保持されるように修正されています。正規化されていないことにより、removeHeader()によって意図せずヘッダーが削除されないことがあったようです。(SvelteKitなど向けの対応のようです)
node:crypto: timingSafeEqual()の改善
timingSafeEqual()でArrayBufferのbyteOffsetが考慮されるように実装が改善されています。
scrypt-kdfパッケージの利用に当たって必要な変更のようです。
deno add/deno install
パッケージバージョンを明示した際の振る舞いの変更
以下のようにdeno addでパッケージのバージョンを明示した際に、deno.jsonのimportsに^付きでバージョンが設定されないよう振る舞いが変更されています:
$ deno add npm:chalk@5.3.0
# Deno v2.0.1
$ cat deno.json | jq '.imports.chalk'
"npm:chalk@5.3.0"
# Deno v2.0.0
$ cat deno.json | jq '.imports.chalk'
"npm:chalk@^5.3.0"
jsrパッケージ追加時のdeno.jsonの作成がサポート
deno addでjsrパッケージを追加するとdeno.jsonが自動で作成されるよう挙動が改善されています。
エイリアスのサポート
deno addまたはdeno installでパッケージをインストールする際のエイリアスの指定がサポートされています:
# `<alias>@npm:<package>`の形式で指定できます
$ deno add chalk5@npm:chalk@^5
以下のようにエイリアスによってパッケージを参照できます:
import chalk from "chalk5";
安定性の改善
npmパッケージなどのダウンロード失敗時にリトライが行われるよう挙動が改善されています。
deno remove
npm:などのプレフィックスの指定がサポート
deno removeコマンドでjsr:やnpm:プレフィックスを指定してパッケージを削除できるよう改善されています:
$ deno remove npm:chalk
--allow-scripts
deno runなどのサポート
deno runやdeno addなどのコマンドでも--allow-scriptsがサポートされています (今まではdeno cacheとdeno installでのみサポートされていました)
nodeModulesDir: "auto"が設定されている場合の体験を改善することが目的のようです。
--allow-import
Workerコンストラクタのdenoオプション(--unstable-worker-optionsが必要)でpermissions.import(--allow-import)がサポートされています。
deno lsp
相対形式のマッピングへの補完
以下のようなマッピングに対してうまく補完が動作しない問題が改善されています:
{
"imports": {
"$/": "./src/"
}
}
deno/didRefreshDenoConfigurationTreenotificationが実装
プロジェクトに含まれる各deno.jsonやpackage.jsonのパスなどを通知してくれるようです。
deno test --doc
default exportとnamed exportの衝突に関するハンドリング
deno test --docでdefault exportとnamed exportで同じ名前を持つ要素がexportされたモジュールに対するコードブロックのテストをする際に、named exportの方が優先されるよう挙動が修正されています。
deno repl
JSONファイルをimportできない問題が修正
deno replにおいてImport AttributesによるJSONファイルのimportができない問題が解消されています。
--checkオプションの削除
deno replコマンドから--checkと--no-checkオプションが削除されています。
deno info --json
npmパッケージに関する修正
deno info --jsonでnpmパッケージに関する表示が改善されています。レジストリのURL(registryUrl)の追加などが行われているようです。
@deno/otel
Deno公式から@deno/otelというパッケージが公開されているようです:
OpenTelemetryのエクスポーターとして機能してくれるパッケージのようなのですが、Deno.tracingというDeno本体にはおそらくまだ入っていないAPIが利用されており、もしかしたら将来的に追加される可能性があるのかもしれません。
@std/kvの追加について
deno_stdに@std/kvパッケージを追加することが提案されています (deno_stdにDeno KVに関するパッケージを追加することは以前にも一度検討されていました)
内容としてはkv-toolboxが提供している以下のモジュールの機能を@std/kvから提供することが提案されています:
@kitsonk/kv-toolbox/json- Deno KVが取り扱う型をJSONでエンコード/デコードするためのモジュール@kitsonk/kv-toolbox/size_of- Deno KVに格納される値のバイトサイズを推測するためのユーティリティー
esbuild_deno_loader v0.11.0
esbuild_deno_loader v0.11.0がリリースされています。
Deno v2とDeno workspacesやdeno.jsonの自動検出などのサポートが追加されています。