コマンドラインインターフェイス

Deno はコマンドラインプログラムです。ここまでの例で、簡単なコマンドをいくつか知っているはずですし、シェルの基本的な使い方も理解しているはずです。

主なヘルプテキストを表示する方法は複数あります。

# サブコマンドを使う
deno help

# ショートフラグを使う -- 上と同じ出力になる
deno -h

# ロングフラグを使う -- 利用可能ならより詳細なヘルプテキストが表示される
deno --help

Deno の CLI はサブコマンドが基本です。上のコマンドは、deno bundle のようにサポートされているサブコマンドの一覧を表示します。 特定のサブコマンドのヘルプを確認するやり方も同様で、たとえば bundle なら次のどれかを実行します。

deno help bundle
deno bundle -h
deno bundle --help

各サブコマンドの詳細なガイドはここにあります。

スクリプトのソース

Deno は複数のソースからスクリプトを取得できます。ファイル名、URL、そして標準入力からファイルを読む場合は - が使えます。 これは他のアプリケーションと統合するときに役立ちます。

deno run main.ts
deno run https://mydomain.com/main.ts
cat main.ts | deno run -

スクリプトの引数

Deno のランタイムフラグとは別に、ユーザー空間の引数をスクリプトに渡すことができます。そのためにはスクリプトの実行時にスクリプト名の後ろに引数を書きます。

deno run main.ts a b -c --quiet
// main.ts
console.log(Deno.args); // [ "a", "b", "-c", "--quiet" ]

Note that anything passed after the script name will be passed as a script argument and not consumed as a Deno runtime flag. This leads to the following pitfall: 注意: スクリプト名の後に渡される文字列は何でもスクリプトの引数として解釈され、Deno ランタイムのフラグとして解釈されません。 そのため、以下のような落とし穴があります。

# 正しい。net_client.ts にネットワークの許可を与えます。
deno run --allow-net net_client.ts

# 間違い! --allow-net は Deno.args に渡されます。ネットワークのパーミッションエラーが投げられます。
deno run net_client.ts --allow-net

これは次の慣例に従っていないと思う人もいるでしょう。

位置に関係ないはずのフラグが位置によって異なる解釈になる。

けれども、

  1. これがランタイムフラグとスクリプトの引数を区別する最も合理的な方法です
  2. これがランタイムフラグとスクリプトの引数を区別する最も人間工学的な方法です
  3. This is, in fact, the same behaviour as that of any other popular runtime.
    • Try node -c index.js and node index.js -c. The first will only do a syntax check on index.js as per Node's -c flag. The second will execute index.js with -c passed to require("process").argv.
  4. 実際にこれは他の有名なランタイムの挙動と同じです
    • node -c index.jsnode index.js -c を実行してみてください。 一番目のコマンドは Node の -c フラグと解釈されて index.js の構文チェックのみを行います。 二番目のコマンドは index.js実行しrequire("process").argv-c を渡します

フラグはいくつか論理的なグループに分けられ、関連するサブコマンドの間で共有されています。 次の項で説明します。

watch モード

--watch フラグを deno run に与えると組み込みのファイルウォッチャーが有効になります。 このフラグ付きで Deno を起動すると、エントリーポイントとそこから静的にインポートされるすべてのローカルファイルをウォッチします。 ディスク上でこれらのファイルの一つでも変更されると、プログラムは自動的に再起動します。

integrity フラグ

リソースをダウンロードしてキャッシュに保存できるコマンドに影響を与えます。 たとえば deno cachedeno rundeno test です。

--lock <FILE>    Check the specified lock file
--lock-write     Write lock file. Use with --lock.

詳細はここを確認してください。

キャッシュとコンパイルに関するフラグ

Affect commands which can populate the cache: deno cache, deno run and deno test. As well as the flags above this includes those which affect module resolution, compilation configuration etc. キャッシュを生成することのあるコマンドに影響を与えます。たとえば、 deno cachedeno rundeno test です。 上記のフラグと同様に、モジュール解決やコンパイル設定などに影響を与えるフラグも含みます。

--config <FILE>               Load tsconfig.json configuration file
--importmap <FILE>            UNSTABLE: Load import map file
--no-remote                   Do not resolve remote modules
--reload=<CACHE_BLOCKLIST>    Reload source code cache (recompile TypeScript)
--unstable                    Enable unstable APIs

ランタイムフラグ

ユーザーコードを実行するコマンドに影響を与えます。たとえば deno rundeno test です。 これらは上記のフラグに加えて以下のフラグを含みます。

パーミッションフラグ

ここに一覧があります。

その他のランタイムフラグ

他のフラグは実行環境に影響を与えます。

--cached-only                Require that remote dependencies are already cached
--inspect=<HOST:PORT>        activate inspector on host:port ...
--inspect-brk=<HOST:PORT>    activate inspector on host:port and break at ...
--seed <NUMBER>              Seed Math.random()
--v8-flags=<v8-flags>        Set V8 command line options. For help: ...