ワークスペースのサポートについて
DenoにワークスペースをサポートするPRがマージされています。Deno v1.39でリリースされる可能性があるかもしれません。
これはdeno.jsonで定義された各ワークスペースごとに独自のImport Mapsを持たせることができる機能のようです。
利用方法
⚠️この機能は今後使用方法が大きく変わる可能性があります。
以下の構成のプロジェクトがあったとします。
.
├── deno.json
├── main.ts
├── ws-a
│ ├── deno.json
│ └── mod.ts
└── ws-b
├── deno.json
└── mod.ts
ワークスペースを利用する際は、ルートディレクトリのdeno.jsonでワークスペースとして扱うディレクトリを指定します。
{
"workspaces": ["ws-a", "ws-b"],
"imports": {
"$std/": "https://deno.land/std@0.206.0"
}
}
これにより、ws-aとws-bという2つのワークスペースが認識されます。
ws-a/deno.jsonは以下のように定義します。ここではルートディレクトリとは異なるバージョンのdeno_stdを読み込むよう指定しています。
{
"name": "ws-a",
"version": "0.0.1",
"imports": {
"$std/": "https://deno.land/std@0.207.0/"
}
}
ws-a/mod.tsは以下のように書かれていたとします。
export { VERSION } from "$std/version.ts";
ws-b/deno.jsonは以下のように定義します。
{
"name": "ws-b",
"version": "0.0.1",
"imports": {
"chalk": "npm:chalk@5.3.0"
}
}
ws-b/mod.tsは以下のように書かれていたとします。
export { VERSION } from "$std/version.ts";
export { default as chalk } from "chalk";
ルートディレクトリのmain.tsは以下のように書かれていたとします。
import { VERSION } from "$std/version.ts";
import { VERSION as VERSION_FROM_A } from "./ws-a/mod.ts";
import { VERSION as VERSION_FROM_B, chalk } from "./ws-b/mod.ts";
console.info(chalk.bold(VERSION));
console.info(VERSION_FROM_A);
console.info(VERSION_FROM_B);
この状態でルートディレクトリのmain.tsを実行してみます。この際に--unstable-workspacesを指定すると、ワークスペースのサポートが有効化されます。
$ deno run --unstable-workspaces main.ts
0.206.0 # ルートディレクトリではdeno_std@0.206.0が読み込まれます
0.207.0 # ws-aではdeno_std@0.207.0が読み込まれます
0.206.0 # ws-bではdeno_std@0.206.0が読み込まれます
Deno v1.38.2
Deno v1.38.2がリリースされました。
AbortSignal.anyが実装
const signal1 = AbortSignal.timeout(1000);
const signal2 = new AbortController().signal;
const signal3 = AbortSignal.any([signal1, signal2]);
setTimeout(() => {
console.info(signal3.reason); // => DOMException: Signal timed out.
}, 2000);
deno lsp: vscode-denoでDenoのアップデートがサポート
Denoの最新バージョンが見つかった際に、vscode-denoからプロンプトが表示されます。
deno upgrade同様、DENO_NO_UPDATE_CHECKが設定されていればスキップされます。
Node.js互換性の改善
node:perf_hooks:performance.getEntriesByName()/performance.getEntriesByType()が追加されました。node:process:process.geteuid()が実装されました。(Windowsでは未定義(undefined)になります)- BYONM:
node_modules内のCommonJS形式のエントリポイントを提供するパッケージが動作しない問題が修正されました。
その他
TextDecoderStreamで発生するリソースリークが修正されました。--strace-opsオプションが追加されました。実行されたopを追跡できます。$ deno run -A --strace-ops=fs main.js [ 0.027] op_fs_read_file_text_async: Dispatched Async [ 0.028] op_fs_read_file_text_async: CompletedAsync Async
deno_std v0.207.0
deno_std v0.207.0がリリースされています。
v1のリリースに向けて新しいロードマップ(Roadmap to v1, pt. 2 #3805)が公開されていて、それに向けた作業が進められているようです。
TypeScriptのenumが非推奨化
deno_stdでTypeScriptのenumの使用が非推奨化されています。
- std/fs/eol.ts:
EOLが非推奨化されました。- 代わりに
LF/CRLFが追加されているため、それらで代用できます。
- 代わりに
- std/http/status.ts:
Statusが非推奨化されました。- 代わりに
STATUS_CODE/STATUS_TEXTが追加されているため、それらで代用できます。 isInformationalStatus()などの各種述語関数もStatusではなくnumberを受け取るように変更されています。
- 代わりに
非推奨化されたモジュール/APIの削除
以下の非推奨化されたモジュール/APIが削除されました。
std/wasistd/http/http_errors.tsstd/crypto/crypto.ts:crypto.subtle.timingSafeEqualstd/crypto/timing_safe_equal.tsは残っていて、そちらは引き続き利用できます。
既存モジュール/APIの非推奨化
以下のモジュール/APIが非推奨化されました。
std/http/server_sent_event.tsstd/bytes/concat.ts: スプレッド形式のconcat()
std/flagsがstd/cli/parse_args.tsへ移動
std/flagsがstd/cli/parse_args.tsへ移動されました。
今後、CLIに関するAPIはこのstd/cliに追加されていく想定のようです。
std/data_structuresが追加
元々std/collections/unstable_*に配置されていたファイルがstd/data_structuresに移動されています。
collections/unstable_binary_heap.ts→data_structures/binary_heap.tscollections/unstable_binary_search_tree.ts→data_structures/binary_search_tree.tscollections/unstable_comparators.ts→data_structures/comparators.ts
この変更に合わせて、std/collectionsのbinary_heap.ts/binary_search_tree.ts/red_black_tree.tsが非推奨化されています。
Deno Subhosting
Deno SubhostingというDenoの公式サービスが公開されました。
Deno SubhostingはSaaS提供者向けのサービスのようで、主にユーザーから提供されたカスタムコードを実行するための仕組みをサービスに実装するために利用されることが想定されているようです。現時点では、Netlify Edge Functionsなどの基盤として利用されているようです。