ワークスペースのサポートについて
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/wasi
std/http/http_errors.ts
std/crypto/crypto.ts
:crypto.subtle.timingSafeEqual
std/crypto/timing_safe_equal.ts
は残っていて、そちらは引き続き利用できます。
既存モジュール/APIの非推奨化
以下のモジュール/APIが非推奨化されました。
std/http/server_sent_event.ts
std/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.ts
collections/unstable_binary_search_tree.ts
→data_structures/binary_search_tree.ts
collections/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などの基盤として利用されているようです。