命令行界面
Deno 是一个命令行程序。Deno 命令行界面 (CLI) 可用于运行脚本、管理依赖项,甚至将代码编译成独立的可执行文件。您可能已经熟悉了一些简单的命令,因为您已经学习了一些示例。本页将提供 Deno CLI 的更详细概述。
Deno CLI 有许多子命令(例如 run
、init
和 test
等)。它们用于在 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/hello-world.ts
您还可以通过管道将脚本通过标准输入来运行它。这对于与其他命令行工具集成或动态生成脚本非常有用。
cat main.ts | deno run -
传递脚本参数 跳转到标题
脚本参数是您在从命令行运行脚本时可以传递给脚本的附加参数。这些参数可用于根据运行时提供的输入自定义程序的行为。参数应该在脚本名称之后传递。
为了测试这一点,我们可以创建一个脚本,该脚本将记录传递给它的参数。
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 run
、deno test
、deno compile
和 deno fmt
提供 --watch
标志以启用内置文件监听器。每当在源文件中检测到更改时,监听器都会启用应用程序的自动重新加载。这在开发过程中特别有用,因为它允许您立即查看更改的效果,而无需手动重新启动应用程序。
被监听的文件将取决于所使用的子命令。
- 对于
deno run
、deno test
和deno 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 展开 glob。
deno run --watch --watch-exclude='*.js' main.ts
热模块替换模式 跳转到标题
您可以将 --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);
});
完整性标志(锁文件)跳转到标题
影响可以将资源下载到缓存的命令: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
在此处了解更多关于这些信息。
缓存和编译标志跳转到标题
影响可以填充缓存的命令: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
运行时标志跳转到标题
影响执行用户代码的命令:deno run
和 deno test
。这些包括以上所有以及以下内容。
类型检查标志跳转到标题
您可以使用以下命令对代码进行类型检查(不执行代码):
> deno check main.ts
您还可以通过使用 deno run
的 --check
参数在执行之前对代码进行类型检查。
> deno run --check main.ts
此标志会影响 deno run
、deno eval
、deno repl
。下表描述了各种子命令的类型检查行为。“本地”是指只有本地代码中的错误才会引发类型错误,从 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: ...