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/didRefreshDenoConfigurationTree
notificationが実装
プロジェクトに含まれる各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
の自動検出などのサポートが追加されています。