deno.com
在本頁面中

命令列介面

Deno 是一個命令列程式。Deno 命令列介面 (CLI) 可用於執行腳本、管理相依性,甚至將您的程式碼編譯成獨立的可執行檔。您可能已經熟悉一些簡單的命令,如果您已經依照目前的範例操作。本頁面將提供 Deno CLI 的更詳細概述。

Deno CLI 有許多子命令(例如 `run`、`init` 和 `test` 等)。它們用於在 Deno 執行階段環境中執行不同的任務。每個子命令都有自己的一組旗標和選項(例如 --version),可用於自訂其行為。

您可以透過在終端機中執行 `deno help` 子命令,或使用 `-h` 或 `--help` 旗標來查看所有可用的命令和旗標。

請查看 CLI 參考指南 以取得有關所有可用子命令和旗標的進一步文件。我們將在下面更詳細地查看一些命令,以了解如何使用和配置它們。

子命令範例 - deno run Jump to heading

您可以透過指定相對於目前工作目錄的路徑來執行本機 TypeScript 或 JavaScript 檔案

deno run main.ts

Deno 支援直接從 URL 執行腳本。這對於快速測試或執行程式碼而無需事先下載非常有用

deno run https://deno-docs.dev.org.tw/examples/scripts/hello_world.ts

您也可以透過標準輸入管道傳輸腳本來執行腳本。這對於與其他命令列工具整合或動態產生腳本非常有用

cat main.ts | deno run -

傳遞腳本參數 Jump to heading

腳本參數是在從命令列執行腳本時,您可以傳遞給腳本的額外參數。這些參數可用於根據執行階段提供的輸入來自訂程式的行為。參數應在腳本名稱**之後**傳遞。

為了測試這一點,我們可以建立一個腳本,該腳本將記錄傳遞給它的參數

main.ts
console.log(Deno.args);

當我們執行該腳本並將一些參數傳遞給它時,它會將它們記錄到主控台

$ deno run main.ts arg1 arg2 arg3
[ "arg1", "arg2", "arg3" ]

參數與旗標順序 Jump to heading

請注意,腳本名稱之後傳遞的任何內容都將作為腳本參數傳遞,而不會作為 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

常用旗標 Jump to heading

某些旗標可以與多個相關的子命令一起使用。我們將在下面討論這些。

監看模式 Jump to heading

您可以將 `--watch` 旗標提供給 `deno run`、`deno test` 和 `deno fmt`,以啟用內建的檔案監看器。監看器可以在偵測到來源檔案中的變更時自動重新載入您的應用程式。這在開發期間特別有用,因為它允許您立即看到變更的效果,而無需手動重新啟動應用程式。

監看的檔案將取決於使用的子命令

  • 對於 `deno run` 和 `deno test`,將監看進入點以及進入點靜態匯入的所有本機檔案。
  • 對於 `deno fmt`,將監看所有作為命令列參數指定的本機檔案和目錄(如果未傳遞特定的檔案/目錄,則監看工作目錄)。
deno run --watch main.ts
deno test --watch
deno fmt --watch

您可以透過提供 `--watch-exclude` 旗標從監看中排除路徑或模式。語法為 `--watch-exclude=path1,path2`。例如

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

這將排除 file1.ts 和 file2.ts 不被監看。

若要排除模式,請記得將其用引號括起來,以防止您的 shell 擴展 glob

deno run --watch --watch-exclude='*.js' main.ts

熱模組替換模式 Jump to heading

您可以將 `--watch-hmr` 旗標與 `deno run` 一起使用,以啟用熱模組替換模式。執行階段環境將嘗試就地更新程式,而不是重新啟動程式。如果就地更新失敗,程式仍將重新啟動。

deno run --watch-hmr main.ts

當觸發熱模組替換時,執行階段環境將派發類型為 `hmr` 的 `CustomEvent`,其中將包含 `detail` 物件中的 `path` 屬性。您可以監聽此事件並在模組更新時執行您需要執行的任何其他邏輯(例如,透過 WebSocket 連線通知瀏覽器)。

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

完整性旗標 (鎖定檔) Jump to heading

影響可以將資源下載到快取的命令:`deno install`、`deno run`、`deno test`、`deno doc` 和 `deno compile`。

--lock <FILE>    Check the specified lock file
--frozen[=<BOOLEAN>] Error out if lockfile is out of date

這裡找到更多相關資訊。

快取與編譯旗標 Jump to heading

影響可以填充快取的命令:`deno install`、`deno run`、`deno test`、`deno doc` 和 `deno 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

執行階段旗標 Jump to heading

影響執行使用者程式碼的命令:`deno run` 和 `deno test`。這些包括以上所有內容以及以下內容。

型別檢查旗標 Jump to heading

您可以使用以下命令型別檢查您的程式碼(而不執行它)

> deno check main.ts

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

> deno run --check main.ts

此旗標影響 `deno run`、`deno eval`、`deno repl`。下表描述了各種子命令的型別檢查行為。此處「Local」表示只有來自本機程式碼的錯誤才會導致型別錯誤,從 https URL(遠端)匯入的模組可能存在未報告的型別錯誤。(若要為所有模組開啟型別檢查,請使用 `--check=all`。)

子命令 型別檢查模式
deno bench 📁 本機
deno check 📁 本機
deno compile 📁 本機
deno eval ❌ 無
deno repl ❌ 無
deno run ❌ 無
deno test 📁 本機

權限旗標 Jump to heading

這些在 這裡 列出。

其他執行階段旗標 Jump to heading

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

--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: ...

您找到需要的資訊了嗎?

隱私權政策