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()ArrayBufferbyteOffsetが考慮されるように実装が改善されています。

scrypt-kdfパッケージの利用に当たって必要な変更のようです。


deno add/deno install

パッケージバージョンを明示した際の振る舞いの変更

以下のようにdeno addでパッケージのバージョンを明示した際に、deno.jsonimports^付きでバージョンが設定されないよう振る舞いが変更されています:

$ 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 rundeno addなどのコマンドでも--allow-scriptsがサポートされています (今まではdeno cachedeno installでのみサポートされていました)

nodeModulesDir: "auto"が設定されている場合の体験を改善することが目的のようです。


--allow-import

Workerコンストラクタのdenoオプション(--unstable-worker-optionsが必要)でpermissions.import(--allow-import)がサポートされています。


deno lsp

相対形式のマッピングへの補完

以下のようなマッピングに対してうまく補完が動作しない問題が改善されています:

{
  "imports": {
    "$/": "./src/"
  }
}

deno/didRefreshDenoConfigurationTreenotificationが実装

プロジェクトに含まれる各deno.jsonpackage.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から提供することが提案されています:

esbuild_deno_loader v0.11.0

esbuild_deno_loader v0.11.0がリリースされています。

Deno v2とDeno workspacesdeno.jsonの自動検出などのサポートが追加されています。