Deno v1.23がリリースされました。
この記事では主な変更点などについて解説します。
deno run
やdeno cache
などのコマンドでデフォルトの型チェックが無効化されました
下記コマンドで、デフォルトで型チェックが行われなくなります。
deno run
deno cache
deno eval
deno 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でも動きます)
コマンドの追加
下記コマンドがサポートされました。
cat
xargs
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
コマンドで、下記拡張子のファイルがサポートされています。
cjs
cts
mjs
mts
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)