Denoばた会議 Monthly 第24回

Deno v1.38

BYONM (Bring your own node_modules)

npmやpnpmなどで作成されたnode_modulesからnpmパッケージを読み込むための機能です。

deno.jsonで以下を指定するか--unstable-byonmにより有効化できます。

{
  "unstable": ["byonm"]
}

deno doc --html

APIドキュメントを静的なHTMLページとして出力できます。

# (1) api-docs/にHTMLドキュメントを出力します
$ deno doc --html --output=api-docs --name=fresh-testing-library mod.ts
Written 261 files to "./api-docs/"



# (2) ブラウザで閲覧できます
$ xdg-open ./api-docs/index.html

deno doc --lint

各APIのJSDocドキュメントに対して検査を行うことができます。

$ deno doc --lint server.ts
Type 'CreateHandlerContextOptions' references type 'ContextFactoryOptions'
  which is not exported from a root module.
    at file:///home/uki00a/ghq/github.com/uki00a/fresh-testing-library/server.ts:27:1

  ...

Missing JS documentation comment.
    at file:///home/uki00a/ghq/github.com/uki00a/fresh-testing-library/server.ts:294:1

error: Found 13 documentation diagnostics.

$ echo $?
1

HMRがサポート (--unstable-hmr)

使い方は基本的に--watchと同様です。

$ deno run --unstable-hmr=config.json --no-clear-screen mod.ts

モジュールの変更時に、可能な際はプロセス全体を再起動せずに対象のモジュールのみを差し替えてくれる点が--watchと異なります。

HMRがサポート (--unstable-hmr)

特定のモジュールが変更されるとhmrイベントが発火するため、アプリケーションなどで処理することができます。

addEventListener("hmr", (e) => {
  handleHMR(e.detail.path);
});

function handleHMR(path: string) {
  // ...
}

unstable APIの詳細な制御

deno.json"unstable"フィールドが追加されています。

{
  // Deno KVとDeno.cron関連のunstable APIのみを有効化します
  "unstable": ["kv", "cron"]
}

unstable APIの詳細な制御 (2)

--unstable-*オプションによる有効化も可能です。

# Deno KVとFFI関連のunstable APIのみを有効化します
$ deno run --unstable-kv --unstable-ffi main.js

compilerOptions.jsx: "precompile"

主にSSRでの利用に最適化されたDeno独自のオプションです。freshでは次のバージョンあたりで対応が入りそうです。(#2035)

{
  "compilerOptions": {
    "jsx": "precompile",
    "jsxImportSource": "preact"
  },
  "imports": {
    "preact": "https://esm.sh/preact@10.19.0",
    "preact/": "https://esm.sh/preact@10.19.0/"
  }
}

.envのサポート (--envオプション)

--allow-read=.envなしで.envを読み込めるのが特徴です。

$ deno run --env main.js

.envのサポート (--envオプション)

.env以外から読み込むこともできます。

$ deno run --env=.env.development main.js

Deno.cron()

Deno.cron(
  "sample", // ジョブ名
  "*/1 * * * *", // cron式
  async () => { // ハンドラー
    await doSomething();
  },
);

利用するにはdeno.json"unstable": ["cron"] または --unstable-cronの指定が必要です。

その他の話題

denoland/denokvが公開

Deno KVの以下に関する実装がdenoland/denokvへ分離されました。

  • Deno KVのSQLiteバックエンド
  • KV Connectプロトコルの実装

denoland/denokvにはDockerイメージやCLIの実装なども含まれているため、セルフホストすることも可能です。

deno_std/wasiの非推奨化

deno_std/wasiが非推奨化されました。

今後はwasmer-jsなどへの移行が推奨されるようです。

Deno Subhosting

Deno Subhostingというサービスが公開されました。

Netlify Edge Functionsなどの基盤として利用されているようです。

Deno Advent Calendar 2023

QiitaでDeno Advent Calendar 2023が公開されています!