deno.com
本页内容

命令行界面

Deno 是一个命令行程序。Deno 命令行界面(CLI)可用于运行脚本、管理依赖项,甚至将代码编译成独立的可执行文件。到目前为止,你可能已经通过示例熟悉了一些简单的命令。本页面将更详细地概述 Deno CLI。

Deno CLI 有许多子命令(例如 runinittest 等)。它们用于在 Deno 运行时环境中执行不同的任务。每个子命令都有自己的一组标志和选项(例如 --version),可用于自定义其行为。

你可以通过在终端中运行 deno help 子命令,或使用 -h--help 标志来查看所有可用的命令和标志。

请查看CLI 参考指南,以获取所有可用子命令和标志的进一步文档。我们将在下面更详细地介绍几个命令,看看它们如何使用和配置。

一个示例子命令 - deno run 跳转到标题

你可以通过指定其相对于当前工作目录的路径来运行本地 TypeScript 或 JavaScript 文件

deno run main.ts

Deno 支持直接从 URL 运行脚本。这对于快速测试或运行代码而无需先下载它特别有用

deno run https://docs.deno.org.cn/examples/scripts/hello_world.ts

你还可以通过标准输入管道运行脚本。这对于与其他命令行工具集成或动态生成脚本非常有用

cat main.ts | deno run -

传递脚本参数 跳转到标题

脚本参数是你从命令行运行脚本时可以传递给脚本的额外参数。这些参数可用于根据运行时提供的输入自定义程序的行为。参数应在脚本名称之后传递。

为了测试这一点,我们可以创建一个脚本,它将记录传递给它的参数

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

当我们运行该脚本并向其传递一些参数时,它会将它们记录到控制台

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

参数和标志的顺序 跳转到标题

请注意,脚本名称之后传递的任何内容都将作为脚本参数传递,而不会被用作 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

常用标志 跳转到标题

一些标志可以与多个相关子命令一起使用。我们将在下面讨论这些。

观察模式 跳转到标题

你可以向 deno rundeno testdeno fmt 提供 --watch 标志以启用内置文件监视器。当源文件中检测到更改时,监视器可以自动重新加载你的应用程序。这在开发过程中特别有用,因为它允许你立即看到更改的效果,而无需手动重新启动应用程序。

被监视的文件将取决于所使用的子命令

  • 对于 deno rundeno 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

热模块替换模式 跳转到标题

你可以将 --watch-hmr 标志与 deno run 一起使用来启用热模块替换模式。运行时将尝试原地更新程序,而不是重新启动程序。如果原地更新失败,程序仍将重新启动。

deno run --watch-hmr main.ts

当触发热模块替换时,运行时将分派一个类型为 hmrCustomEvent,其 detail 对象中将包含 path 属性。你可以监听此事件并执行在模块更新时需要执行的任何额外逻辑(例如,通过 WebSocket 连接通知浏览器)。

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

完整性标志(锁文件) 跳转到标题

影响可以将资源下载到缓存的命令:deno installdeno rundeno testdeno docdeno compile

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

在此处了解更多相关信息:这里

缓存和编译标志 跳转到标题

影响可以填充缓存的命令:deno installdeno 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

你还可以在执行前通过使用 deno run--check 参数来对代码进行类型检查

> deno run --check main.ts

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

子命令 类型检查模式
deno bench 📁 本地
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: ...

您找到所需内容了吗?

隐私政策