Deno v1.23がリリースされました。
この記事では主な変更点などについて解説します。
deno runやdeno cacheなどのコマンドでデフォルトの型チェックが無効化されました
下記コマンドで、デフォルトで型チェックが行われなくなります。
deno rundeno cachedeno evaldeno repl
今後、型チェックを行いたい場合は、deno checkコマンドを使うか--checkオプションを指定する必要があります。
$ deno check mod.ts
その他のdeno testなどのコマンドでは、引き続きローカルモジュールの型チェックがデフォルトで実行されます。
deno runが失敗する場合の対処方法
Denoは、型チェックを行わない場合、swcを使用してトランスパイルを行います。
その関係で、コードの実行時に、まれに問題が発生することがあるようです。
問題に遭遇した場合は、--checkオプションを指定するとtscが使用されるため、問題を回避できる可能性があります。
$ deno run --check mod.ts
Deno.sleepSync()の削除
Atomics.waitで代替可能であったり、イベントループを完全にブロックしてしまうなどの問題を抱えていたため、Deno.sleepSync()が削除されました。
Intl.v8BreakIteratorの削除
非標準APIであるため、Intl.v8BreakIteratorが削除されました。
代わりにIntl.Segmenterの使用が推奨されます。
deno taskコマンドの改善
--cwdオプションのサポート
--cwdオプションにより、タスク実行時のカレントディレクトリを変更できるようになりました (デフォルトでは、deno.json(c)の配置場所がカレントディレクトリに設定されます)
$ deno task --cwd ./src build
リダイレクションのサポート
タスクの定義でリダイレクションがサポートされました。
{
"tasks": {
"test": "echo foo > test.txt"
}
}
また、/dev/nullにリダイレクトすると、出力が捨てられます (Windowsでも動きます)
コマンドの追加
下記コマンドがサポートされました。
catxargs
WindowsなどのOS上でも、これらのコマンドに依存したタスクを定義することができます。
TypeScript v4.7
Denoの内部で使用されるTypeScriptのバージョンがv4.7へアップデートされました。
合わせて、Denoの内部で"moduleDetection": "force"オプションが有効化されています。
https://devblogs.microsoft.com/typescript/announcing-typescript-4-7/
deno fmtコマンドの改善
上記、TypeScript v4.7に関連して、deno fmtコマンドで、下記拡張子のファイルがサポートされています。
cjsctsmjsmts
deno infoコマンドで--configフラグがサポート
以下のように、deno infoコマンドに設定ファイルの配置場所を指定できます。
$ deno info --config tsconfig.json
deno replコマンドの改善
REPLでのコードの入力中に、Ctrl+sで新しい行を挿入できるようになりました。
Worker内でのDeno.exitの振る舞いが変更
Deno.exit()がWorker内ではself.close()と同様の振る舞いをするよう挙動が変更されました。
self.onmessage = () => {
Deno.exit(); // => Workerが閉じます
};
ブラウザにおいてはWorkerからメインウィンドウを閉じる手段がなく、DenoにおいてもWorker内からはプロセスを閉じられないようにすべき、というのがこの変更の背景のようです。
FFI(Deno.dlopen)でBigIntがサポート
64ビットの数値を返す関数をFFI経由で呼んだ際に、戻り値がNumberではなくBigIntとして返却されるように修正されました。
また、FFI経由で関数を呼ぶ際にBigIntを渡せるようになりました。
Deno.Child.killの引数が任意に
Deno.spawnChild()で返却されるDeno.Childオブジェクトのkillメソッドで、引数を省略できるようになりました。
引数を省略した際は、子プロセスにSIGTERMが送られます。
(Windows) Deno.addSignalListenerでSIGINTとSIGBREAKシグナルがサポート
Windows向けにDeno.addSignalListenerでSIGINTとSIGBREAKのサポートが追加されました。
Deno.addSignalListener("SIGINT", () => {
console.log("Received SIGINT");
});
CompressionStreamとDecompressionStreamでdeflate-rawフォーマットがサポート
CompressionStreamとDecompressionStreamで"deflate-raw"フォーマット(Deflateアルゴリズム)がサポートされました。
new CompressionStream("deflate-raw");
https://wicg.github.io/compression/#supported-formats
その他の変更点
SubleCrypto.exportKeyでECDH/ECDSAキーを"raw"フォーマットでエクスポートできるようになりました。Deno.inspectによるフォーマット時に、カスタムのinspect関数(Deno.customInspect)にInspectOptionsが渡されるようになりました。Deno.getGid()が実装されました (Deno v1.22.2)fetchの引数にURLを渡す形式が非推奨ではなくなりました (Deno v1.22.3)const res = await fetch(new URL("https://example.com"));--watchオプションで、dynamic importされるファイルが監視されない問題が修正されました (Deno v1.22.3)