標準ライブラリ

Deno は標準モジュールを提供しています。標準モジュールはコアチームに審査され、Deno で動作することが保証されています。

標準ライブラリは https://deno.land/std/ で利用可能です。

バージョニングと安定性

標準ライブラリはまだ stable ではありません。そのため Deno とは異なるバージョニングが行われています。 最新リリースは https://deno.land/std/ か https://deno.land/std/version.ts で確認できます。 標準ライブラリは Deno のリリースに合わせてリリースされます。

意図せぬ変更を避けるために標準ライブラリのバージョンを常に固定してインポートすることを強く推奨します。 たとえば、コードの master ブランチにリンクするのは避けてください。master ブランチはいつでも変更される可能性があり、コンパイルエラーや予期せぬ挙動を潜在的に引き起こします。

// master からのインポート。これは避けてください
import { copy } from "https://deno.land/std/fs/copy.ts";

それよりは、std ライブラリの特定のバージョンを使えば、コードが固定されていて変更されません。

// imports from v0.50.0 of std, never changes
import { copy } from "https://deno.land/std@$STD_VERSION/fs/copy.ts";

トラブルシューティング

標準ライブラリの提供するいつくかのモジュールは Deno の unstable な API を使用しています。

そういったモジュールを CLI の --unstable フラグ抜きで実行すると、Deno 名前空間に API が存在しないことを知らせる TypeScript エラーがいくつも発生して終了します。

// main.ts
import { copy } from "https://deno.land/std@$STD_VERSION/fs/copy.ts";

copy("log.txt", "log-old.txt");
$ deno run --allow-read --allow-write main.ts
Compile file:///dev/deno/main.ts
Download https://deno.land/std@$STD_VERSION/fs/copy.ts
Download https://deno.land/std@$STD_VERSION/fs/ensure_dir.ts
Download https://deno.land/std@$STD_VERSION/fs/_util.ts
error: TS2339 [ERROR]: Property 'utime' does not exist on type 'typeof Deno'.
    await Deno.utime(dest, statInfo.atime, statInfo.mtime);
               ~~~~~
    at https://deno.land/std@$STD_VERSION/fs/copy.ts:90:16

TS2339 [ERROR]: Property 'utimeSync' does not exist on type 'typeof Deno'.
    Deno.utimeSync(dest, statInfo.atime, statInfo.mtime);
         ~~~~~~~~~
    at https://deno.land/std@$STD_VERSION/fs/copy.ts:101:10

この問題を解決するには --unstable フラグを付与する必要があります。

deno run --allow-read --allow-write --unstable main.ts

API から生じるエラーの原因が unstable であるかどうかを確かめるには、 lib.deno.unstable.d.ts 宣言ファイルを確認してください。

この問題は近い将来に修正されるはずです。依存している特定のモジュールがこのフラグなしでコンパイルできるなら、遠慮なくフラグを省略して構いません。