Deno 3.0.0-rc.0

Deno 3.0.0-rc.0 がリリースされています (#31258)

まだ dl.deno.land には公開されていないようなので、変わりに canary バージョンで説明します (3.0.0-rc.0+138b2e0)

$ deno upgrade 138b2e0e

破壊的変更

下記のタイマーAPIがWeb標準ではなく、Node.js互換 (node:timers) のAPIへと置き換えられています (#31272)

  • setTimeout()
  • setInterval()
  • clearTimeout()
  • clearInterval()

globalThis.setTimeout()を実行すると、number型の値ではなくTimeoutオブジェクトが返却されるよう挙動が変わります。

パーミッション

--deny-*よりも--allow-*がより特定的であれば、--allow-*の方が優先されるよう挙動が変更されています (#31224)

# `docs/*`へのアクセスは拒否するが、`docs/foo.txt`についてのみ許可します (今までのバージョンでは`NotCapable`エラーが発生しました)
$ deno --allow-read=docs/foo.txt --deny-read=docs main.js

また、--allow-env--deny-envを併用した際のDeno.env.toObject()およびprocess.envの挙動が変更されています。具体的には、以下のようにDenoを実行した際に、Deno.env.toObject()の返却結果からDENO_DIRDENO_INSTALL_ROOTが除外されます (#31267)

$ deno run --allow-env --deny-env=DENO_DIR,DENO_INSTALL_ROOT main.js

allowScripts

deno.jsonallowScriptsフィールドがサポートされています (#31075)

allowScriptsの詳細については先週のページを参照いただければと思います。

deno compile

deno compileコマンドで--preloadオプションがサポートされています。--preloadで指定されたスクリプトは実行可能ファイル内に組み込まれ、生成された実行可能ファイルが実行される都度、自動で--preloadオプションで指定されたスクリプトが適用されるようです (#31152)

deno repl

--eval-fileオプションで=の指定の省略がサポートされています (#31151)

$ deno repl --eval-file main.js

deno coverage

deno coverage --htmlで生成されたHTMLレポートにダークモードとライトモードを切り替えるためのトグルが追加されています (#31140)

スタックトレースの出力の改善

Denoがスタックトレースを出力する際にパスのカレントディレクトリ部分がグレーで表示されるよう変更されています (#31194)

また、視認性の改善のため、スタックフレーム中のDenoの内部コードに関する行をグレーで表示するよう改善されています (#31247)

Deno API

Deno.kill()およびDeno.ChildProcess#kill()でシグナルの数値での指定がサポートされています (#31153)

const command = new Deno.Command("deno", {
  args: ["eval", "setTimeout(() => console.info('foo'), 5000)"],
  stdout: "inherit",
});
const child = command.spawn();
child.kill(9);

Node.js互換性の改善

node:process

下記APIが実装されています:

node:fs

readFile()flagオプションがサポートされています (#31129)

node:util

getSystemErrorMessage()が実装されています (#31147)

node:perf_hooks

performance.timerify() が実装されています (#31238)

node:crypto

AES-GCM向けにcreateCipheriv()authTagLengthオプションがサポートされています (#31253)

node:worker_threads

Workerexitイベントが複数回発火されないよう修正されています (#31231)

Node-API

Bufferを作成する際に警告が表示される問題が修正されています (#31245)

その他

Deno内部のV8のバージョンがv14.2へアップデートされています (#31178)