Denoの直近の変更について
今週はDeno本体のリリースは行われていないですが、おそらく次のDeno v1.46でリリースされると思われる機能がいくつかマージされていたため、主要なものについて紹介いたします。
⚠️正式にDeno v1.46がリリースされる際には、仕様などに変更が入る可能性もあります🙏
CLI引数の簡略化
パーミッション引数の簡略化
例えば、--allow-read
は-R
, --allow-env
は-E
のように短縮された形式で指定することができます。
# 例) 以下は`deno --allow-read --allow-env main.ts`と同等です
$ deno -ER main.ts
run
の省略 (deno <script>
のサポート)
deno run
コマンドにおけるrun
を省略できるようにする変更が導入されています。
$ deno main.ts
deno run
でタスクの実行がサポート (deno run <task>
)
deno run
コマンドのエントリポイントとして指定されたファイルが存在しない場合、deno.json
のtasks
で定義されたタスクを実行するようフォールバックする機能が追加されています。deno run <entrypoint>
のように実行された際に、<entrypoint>
のファイルが存在しない場合はdeno task <entrypoint>
として振る舞うイメージです。
# `deno.json`の`tasks.hello`が実行されます
$ deno run hello
deno fmt
でのCSSやYAMLのサポート
deno fmt
コマンドにCSS/SCSS/Sass/Less/YAMLなどのフォーマットのサポートが追加されています。
- feat(fmt): support CSS, SCSS, Sass and Less (denoland/deno#24870)
- feat(fmt): support YAML (denoland/deno#24717)
これらのフォーマットを有効化するためには、以下のオプションを指定する必要があるようです。
deno fmt
コマンドに--unstable-css
または--unstable-yaml
を指定するdeno.json
の"unstable"
フィールドで"fmt-css"
または"fmt-yaml"
を指定する
deno clean
コマンド
deno clean
コマンドが追加されています。現状ではDENO_DIR
を削除する機能のみが提供されていますが、今後、より細かく振る舞いを制御できるようにすることなども想定されているようです。
deno_std
のリリース
deno_std
がリリースされています。
@std/csv@1.0.0
@std/csv@1.0.0がリリースされました。
@std/http@1.0.1
@std/http@1.0.1がリリースされています。
@std/http/route
- URLPattern
ベースのルーティングモジュール
URLPattern
を活用して簡易的なルーティングを実装するための実験的なモジュールが追加されています。
route()
を呼ぶとDeno.ServeHandler
型の関数を返却してくれるため、deno serve
やDeno.serve
などと併用することができます。
import { type Route, route } from "jsr:@std/http@1.0.1/route";
const routes: Array<Route> = [
{
pattern: new URLPattern({ pathname: "/messages/:id" }),
handler: (
_req,
_info,
params,
) => new Response(`Message ${params?.pathname.groups.id}`),
},
{
pattern: new URLPattern({ pathname: "/authenticate" }),
method: "POST",
handler: () => new Response("OK"),
},
];
const handler = route(routes);
export default {
fetch(req: Request): Response {
return handler(req);
},
};
余談ですが、Deno.ServeDefaultExport
という型が直近でDenoの本体に追加されているため、deno serve
を使用する際の型の定義が行いやすくなりそうです。(おそらくDeno v1.46でリリースされると思います)
const handler = route(routes);
export default {
fetch(req) {
return handler(req);
},
} satisfies Deno.ServeDefaultExport;
@std/http/{header,method}
実験的なモジュールとして@std/http/header
と@std/http/method
が追加されています。
HTTPヘッダーやメソッドに関する定数が提供されています。
@std/streams@1.0.1
@std/streams@1.0.1がリリースされています。
@std/streams/fixed-chunk-stream
が追加
入力を一定のサイズごとのチャンクに分割してくれるFixedChunkStream
が追加されています。
@std/archive@0.225.0
@std/archive@0.225.0がリリースされています。
APIに関する以下の破壊的変更が実施されています。
TarEntry
のコンストラクターのheader
引数が削除されていますTar
のdata
プロパティーがprivateに変更されていますUntar
のreader
とblock
プロパティーがprivateに変更されています