跳至主要内容

deno repl,交互式脚本提示

deno repl 启动一个读取-求值-打印-循环,它允许您在全局上下文中交互式地构建程序状态,它特别适用于快速原型设计和检查代码片段。

⚠️ Deno REPL 支持 JavaScript 和 TypeScript,但 TypeScript 代码不会进行类型检查,而是会在幕后被转译为 JavaScript。

⚠️ 为了便于复制粘贴代码示例,Deno REPL 支持导入和导出声明。这意味着您可以粘贴包含 import ... from ...;export class ...export function ... 的代码,它将像执行常规 ES 模块一样工作。

特殊变量

REPL 提供了一些始终可用的特殊变量

标识符描述
_返回最后评估的表达式
_error返回最后抛出的错误
Deno 1.14.3
exit using ctrl+d or close()
> "hello world!"
"hello world!"
> _
"hello world!"
> const foo = "bar";
undefined
> _
undefined

特殊函数

REPL 在全局作用域中提供了一些函数

函数描述
clear()清除整个终端屏幕
close()关闭当前 REPL 会话

--eval 标志

--eval 标志允许您在进入 REPL 之前在运行时运行一些代码。这对于导入您在 REPL 中常用的代码或以某种方式修改运行时非常有用。

$ deno repl --allow-net --eval 'import { assert } from "https://deno.land/std/assert/mod.ts"'
Deno 1.36.0
exit using ctrl+d, ctrl+c, or close()
> assert(true)
undefined
> assert(false)
Uncaught AssertionError
at assert (https://deno.land/[email protected]/assert/assert.ts:7:11)
at <anonymous>:2:1

--eval-file 标志

--eval-file 标志允许您在进入 REPL 之前从指定文件运行代码。与 --eval 标志一样,这对于导入您在 REPL 中常用的代码或以某种方式修改运行时非常有用。

文件可以指定为路径或 URL。URL 文件会被缓存,并且可以通过 --reload 标志重新加载。

如果也指定了 --eval,那么 --eval-file 文件将在 --eval 代码之前运行。

$ deno repl --eval-file=https://examples.deno.land/hello-world.ts,https://deno.land/std/encoding/ascii85.ts
Download https://examples.deno.land/hello-world.ts
Hello, World!
Download https://deno.land/std/encoding/ascii85.ts
Deno 1.20.5
exit using ctrl+d or close()
> rfc1924 // local (not exported) variable defined in ascii85.ts
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~"

相对导入路径解析

如果 --eval-file 指定包含相对导入的代码文件,那么运行时将尝试相对于当前工作目录解析导入。它不会尝试相对于代码文件的位置解析它们。当 --eval-file 与模块文件一起使用时,这会导致“模块未找到”错误。

$ deno repl --eval-file=https://deno.land/std/hash/md5.ts
error in --eval-file file https://deno.land/std/hash/md5.ts. Uncaught TypeError: Module not found "file:///home/encoding/hex.ts".
at async <anonymous>:2:13
Deno 1.20.5
exit using ctrl+d or close()
> close()
$ deno repl --eval-file=https://deno.land/std/encoding/hex.ts
Download https://deno.land/std/encoding/hex.ts
Deno 1.20.5
exit using ctrl+d or close()
>

Tab 补全

Tab 补全是在 REPL 中快速导航的关键功能。在按下 tab 键后,Deno 现在将显示所有可能的补全列表。

$ deno repl
Deno 1.14.3
exit using ctrl+d or close()
> Deno.read
readTextFile readFile readDirSync readLinkSync readAll read
readTextFileSync readFileSync readDir readLink readAllSync readSync

键盘快捷键

键击动作
Ctrl-A, Home将光标移动到行首
Ctrl-B, Left将光标向左移动一个字符
Ctrl-C中断并取消当前编辑
Ctrl-D如果行为空,则表示行尾
Ctrl-D, Del如果行不为空,则删除光标下的字符
Ctrl-E, End将光标移动到行尾
Ctrl-F, Right将光标向右移动一个字符
Ctrl-H, Backspace删除光标前的字符
Ctrl-I, Tab下一个补全
Ctrl-J, Ctrl-M, Enter完成行输入
Ctrl-K从光标到行尾删除
Ctrl-L清除屏幕
Ctrl-N, Down历史记录中的下一个匹配项
Ctrl-P, Up历史记录中的上一个匹配项
Ctrl-R反向搜索历史记录(Ctrl-S 向前,Ctrl-G 取消)
Ctrl-T将前一个字符与当前字符互换
Ctrl-U从行首到光标删除
Ctrl-V插入任何特殊字符,而不执行其关联的操作
Ctrl-W删除光标前的单词(使用空格作为单词边界)
Ctrl-X Ctrl-U撤销
Ctrl-Y从剪贴板粘贴
Ctrl-Y从剪贴板粘贴(Meta-Y 粘贴下一个剪贴内容)
Ctrl-Z挂起(仅限 Unix)
Ctrl-_撤销
Meta-0, 1, ..., -指定参数的数字。 开始一个负参数。
Meta <移动到历史记录中的第一个条目
Meta >移动到历史记录中的最后一个条目
Meta-B, Alt-Left将光标移动到上一个单词
Meta-Backspace从当前单词的开头删除,或者如果在单词之间,则删除到上一个单词的开头
Meta-C将当前单词大写
Meta-D向前删除一个单词
Meta-F, Alt-Right将光标移动到下一个单词
Meta-L将下一个单词小写
Meta-T互换单词
Meta-U将下一个单词大写
Meta-Y参见 Ctrl-Y
Ctrl-S插入新行

DENO_REPL_HISTORY

您可以使用DENO_REPL_HISTORY环境变量来控制 Deno 存储 REPL 历史记录文件的位置。您可以将其设置为一个空值,Deno 不会存储历史记录文件。