命令行接口

Deno 是一个命令行程序。到目前为止,你应该熟悉一些简单的命令,并且已经了解了 shell 使用的基本知识。

这是查看主要帮助文档的几种方式:

# 使用子命令
deno help

# 使用短选项 -- 输出和上面一样
deno -h

# 使用长选项 -- 输出更详细的帮助文本(如有)
deno --help

Deno 的 CLI 是基于子命令的。上面提到的帮助命令展示了一个子命令列表,比如 deno bundle。 如果你想查看 bundle 特定子命令,可以类比帮助文档的命令行,运行以下命令其中的一种:

deno help bundle
deno bundle -h
deno bundle --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 运行时选项。 这将导致以下陷阱:

# 正常情况:我们给 net_client.ts 授予网络权限。
deno run --allow-net net_client.ts

# 错误情况:--allow-net 传递为 Deno.args,引发网络权限错误。
deno run net_client.ts --allow-net

有人认为这打破了常规:

一个非位置选项的解析方式会根据位置变化。

然而:

  1. 这是区分运行时选项和脚本参数的最合乎逻辑的方法。
  2. 实际上,这和其他流行的运行时具有相同的行为。
    • 试试 node -c index.jsnode index.js -c. 第一个只会根据-c选项对 index.js 做语法检查. 而第二个会 执行 index.js,将-c 传递为require("process").argv

存在一些有逻辑的选项组,它们在相关的子命令之间共享。 接下来我们将会讨论。

观察模式

你可以在 deno rundeno testdeno bundledeno fmt 后面应用 --watch 选项,启用内置的文件观察器。当 Deno 用这个选项启动时,它会监视:

Whenever one of the watched files is changed on disk, the program will automatically be restarted / formatted / tested / bundled.

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

Integrity flags (lock files)

Affect commands which can download resources to the cache: deno cache, deno run, deno test, deno bundle, deno doc, and deno compile. >>>>>>> 20b3c6f375ccdd16ab16c341e4e8604ff344e7c1

--lock <FILE>    检查指定的锁文件
--lock-write     写入锁文件. 和 --lock 一起使用.

更多信息在 这里 .

缓存和编译选项

Affect commands which can populate the cache: deno cache, deno run, deno test, deno bundle, deno doc, and deno compile. As well as the flags above, this includes those which affect module resolution, compilation configuration etc.

--config <FILE>               加载配置文件
--import-map <FILE>           加载导入映射文件
--no-remote                   不要解析远程模块
--reload=<CACHE_BLOCKLIST>    重新加载源代码缓存(重新编译 TypeScript)
--unstable                    启用不稳定 API

运行时选项

对运行用户代码有影响的命令: deno rundeno test. 这些包括以上所有和以下内容。

Type checking flags

You can type-check your code (without executing it) using the command:

> deno check main.ts

You can also type-check your code before execution by using the --check argument to deno run:

> deno run --check main.ts

This flag affects deno run, deno eval, deno repl and deno cache. The following table describes the type-checking behavior of various subcommands. Here "Local" means that only errors from local code will induce type-errors, modules imported from https URLs (remote) may have type errors that are not reported. (To turn on type-checking for all modules, use --check=all.)

Subcommand Type checking mode
deno bench 📁 Local
deno bundle 📁 Local
deno cache ❌ None
deno check 📁 Local
deno compile 📁 Local
deno eval ❌ None
deno repl ❌ None
deno run ❌ None
deno test 📁 Local

Permission flags

这里 列出了所有权限选项

其他运行时选项

对运行环境有影响的更多选项:

--cached-only                要求远程依赖已经被缓存
--inspect=<HOST:PORT>        在 host:port 启动检查器
--inspect-brk=<HOST:PORT>    在 host:port 启动检查器并且暂停执行
--location <HREF>            Value of 'globalThis.location' used by some web APIs
--seed <NUMBER>              指定 Math.random() 的随机种子
--v8-flags=<v8-flags>        设置 V8 命令行选项