本页内容

命令行界面

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 可以从多个来源获取脚本,包括文件名、URL 和 '-' 以从 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 进行语法检查。第二个将 *执行* index.js,并将 -c 传递给 require("process").argv

存在一些在相关子命令之间共享的标志逻辑组。我们将在下面讨论这些内容。

监视模式 跳转到标题

您可以为 deno rundeno testdeno compiledeno fmt 提供 --watch 标志以启用内置文件监视器。监视的文件取决于使用的子命令

  • 对于 deno rundeno testdeno compile,将监视入口点以及入口点静态导入的所有本地文件。
  • 对于 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 展开通配符

deno run --watch --watch-exclude='*.js' main.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 --check main.ts

此标志影响 deno rundeno evaldeno repldeno cache。下表描述了各种子命令的类型检查行为。这里“本地”表示只有来自本地代码的错误才会导致类型错误,从 https URL(远程)导入的模块可能存在未报告的类型错误。(要为所有模块启用类型检查,请使用 --check=all。)

子命令 类型检查模式
deno bench 📁 本地
deno cache ❌ 无
deno check 📁 本地
deno compile 📁 本地
deno eval ❌ 无
deno repl ❌ 无
deno run ❌ 无
deno 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 ...
--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: ...