跳到主要內容

命令列介面

Deno 是一個命令列程式。你應該已經熟悉一些簡單的指令,並已經了解 shell 使用的基本知識。

有多種方式可以查看主要的說明文字

# Using the subcommand.
deno help

# Using the short flag -- outputs the same as above.
deno -h

# Using the long flag -- outputs more detailed help text where available.
deno --help

Deno 的 CLI 是基於子指令的。上述指令應該會顯示一個受支援的子指令清單,例如 deno compile。若要查看子指令特定的說明,例如 compile,你可以類似地執行以下其中一個指令

deno help compile
deno compile -h
deno compile --help

每個子指令的詳細指南可以在 這裡 找到。

腳本來源

Deno 可以從多個來源擷取腳本,包括檔案名稱、網址,以及從 stdin 讀取檔案的「-」。後者對於與其他應用程式整合很有用。

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" ]

請注意,在腳本名稱之後傳遞的任何內容都會傳遞為腳本參數,而不是作為 Deno 執行時期旗標使用。這會導致以下陷阱

# Good. We grant net permission to net_client.ts.
deno run --allow-net net_client.ts

# Bad! --allow-net was passed to Deno.args, throws a net permission error.
deno run net_client.ts --allow-net

有些人認為這是不尋常的

非位置旗標會根據其位置而以不同的方式進行解析。

然而

  1. 這是區分執行時期旗標和腳本參數最合乎邏輯且最符合人體工學的方式。
  2. 事實上,這與任何其他流行執行時期的行為相同。
    • 試試 node -c index.jsnode index.js -c。第一個只會根據 Node 的 -c 旗標對 index.js 執行語法檢查。第二個會使用傳遞給 require("process").argv-c 執行 index.js

有許多邏輯群組的旗標在相關的子命令之間共用。我們在下方討論這些內容。

監控模式

你可以提供 --watch 旗標給 deno rundeno testdeno compiledeno fmt 來啟用內建檔案監控器。監控的檔案取決於使用的子命令

  • 對於 deno rundeno testdeno compile 進入點,以及進入點靜態匯入的所有本機檔案都將受到監控。
  • 對於 deno fmt 所有指定為命令列參數的本機檔案和目錄(或如果沒有傳遞特定檔案/目錄,則為工作目錄)都將受到監控。

每當監控的檔案之一在磁碟上變更時,程式將自動重新啟動/格式化/測試/套件化。

deno run --watch main.ts
deno test --watch
deno fmt --watch

你可以透過提供 --watch-exclude 旗標來排除路徑不予監控。此旗標僅適用於 deno run。語法為 --watch-exclude=path1,path2。例如

deno run --watch --watch-exclude=file1.ts,file2.ts main.ts

這將排除 file1.ts 和 file2.ts 不予監控。

熱模組替換模式

你可以將 --unstable-hmr 旗標與 deno run 搭配使用,以啟用熱模組替換模式。執行時期會嘗試就地更新程式,而不是重新啟動程式。如果就地更新失敗,程式仍將重新啟動。

deno run --unstable-hmr main.ts

當觸發熱模組替換時,執行時期會發送類型為 hmrCustomEvent,其中會在 detail 物件中包含 path 屬性。你可以聆聽此事件,並在模組更新時執行任何你需要執行的其他邏輯(例如透過 WebSocket 連線通知瀏覽器)。

addEventListener("hmr", (e) => {
console.log("HMR triggered", e.detail.path);
});

完整性標記(鎖定檔案)

影響可將資源下載到快取的指令:deno cachedeno rundeno testdeno docdeno compile

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

在此處深入了解這些資訊。

快取和編譯標記

影響可填入快取的指令:deno cachedeno rundeno testdeno docdeno compile。除了上述標記外,還包括影響模組解析、編譯組態等事項的標記。

--config <FILE>               Load configuration file
--import-map <FILE> 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。這些指令包含上述所有指令,以及下列指令。

類型檢查標記

您可以使用指令類型檢查您的程式碼(不執行程式碼)

> deno check main.ts

您也可以透過使用 --check 參數 deno run 在執行之前類型檢查您的程式碼

> deno run --check main.ts

此標記會影響 deno rundeno evaldeno repldeno cache。下表說明各種子指令的類型檢查行為。在此處,「本機」表示只有來自本機程式碼的錯誤會引發類型錯誤,從 https URL(遠端)匯入的模組可能會有未報告的類型錯誤。(若要對所有模組啟用類型檢查,請使用 --check=all。)

子指令類型檢查模式
deno bench📁 本機
deno 快取❌ 無
deno 檢查📁 本機
deno 編譯📁 本機
deno 評估❌ 無
deno repl❌ 無
deno 執行❌ 無
deno 測試📁 本機

權限標記

這些列於此處

其他執行時期標記

更多影響執行環境的標記。

--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 ...
--inspect-wait=<HOST:PORT> activate inspector on host:port and wait for ...
--location <HREF> Value of 'globalThis.location' used by some web APIs
--prompt Fallback to prompt if required permission wasn't passed
--seed <NUMBER> Seed Math.random()
--v8-flags=<v8-flags> Set V8 command line options. For help: ...

自動完成

你可以使用Fig 為 Deno 取得 IDE 風格的自動完成。它可以在 bash、zsh 和 fish 中運作。

若要安裝,請執行

brew install fig