如何在 Deno REPL 中导入模块?
How to import a module inside the Deno REPL?
尝试在 Deno REPL 中导入模块会导致以下错误:
Uncaught SyntaxError: Cannot use import statement outside a module
at evaluate (rt/40_repl.js:60:36)
at replLoop (rt/40_repl.js:160:15)
我几乎每天都使用 Node REPL 来快速测试代码。无需编写脚本或处理临时文件即可导入外部代码的能力非常方便。
为什么 Deno 不能在模块外使用 import 语句?甚至可以在 Deno REPL 中使用外部代码吗?
如果你也尝试在 Node REPL 中使用 import a from "a"
,它也会抛出同样的错误。只有require
可以直接用于在Node REPL中导入mod规则
对于 Deno,没有 built-in CommonJS 加载器。因此,它甚至不提供 require
供您同步加载内容。
REPL中不能使用static import的技术原因是REPL实际上是一个脚本评估工具:不是将你写的东西编译到ES Module中,而是将它们视为普通脚本并直接输入到引擎中, 类似于浏览器中的 <script>
不开启 type="module"
的方式。 (带有静态导入的 ES mod 规则具有异步加载依赖项和确定 mod 规则的“形状”的语义,甚至实际上 运行 它。)
要在 Deno REPL 中导入 mod 规则,您可以使用动态 import()
。就个人而言,我有时会执行以下操作(加载通常足够快,以至于在继续使用 REPL 中的 mod 之前,您几乎已经设置了 mod
值):
$ deno
> let mod; import("./mod.ts").then(m => mod = m)
Promise { <pending> }
Check file:///[blah]/mod.ts
> mod
Module { a: 1, Symbol(Symbol.toStringTag): "Module" }
从 v1.4.3, you can use top-level await
in the REPL 开始到动态 import
模块:
> const path = await import("https://deno.land/std@0.73.0/path/mod.ts")
> path.basename("/my/path/name")
"name"
尝试在 Deno REPL 中导入模块会导致以下错误:
Uncaught SyntaxError: Cannot use import statement outside a module
at evaluate (rt/40_repl.js:60:36)
at replLoop (rt/40_repl.js:160:15)
我几乎每天都使用 Node REPL 来快速测试代码。无需编写脚本或处理临时文件即可导入外部代码的能力非常方便。
为什么 Deno 不能在模块外使用 import 语句?甚至可以在 Deno REPL 中使用外部代码吗?
如果你也尝试在 Node REPL 中使用 import a from "a"
,它也会抛出同样的错误。只有require
可以直接用于在Node REPL中导入mod规则
对于 Deno,没有 built-in CommonJS 加载器。因此,它甚至不提供 require
供您同步加载内容。
REPL中不能使用static import的技术原因是REPL实际上是一个脚本评估工具:不是将你写的东西编译到ES Module中,而是将它们视为普通脚本并直接输入到引擎中, 类似于浏览器中的 <script>
不开启 type="module"
的方式。 (带有静态导入的 ES mod 规则具有异步加载依赖项和确定 mod 规则的“形状”的语义,甚至实际上 运行 它。)
要在 Deno REPL 中导入 mod 规则,您可以使用动态 import()
。就个人而言,我有时会执行以下操作(加载通常足够快,以至于在继续使用 REPL 中的 mod 之前,您几乎已经设置了 mod
值):
$ deno
> let mod; import("./mod.ts").then(m => mod = m)
Promise { <pending> }
Check file:///[blah]/mod.ts
> mod
Module { a: 1, Symbol(Symbol.toStringTag): "Module" }
从 v1.4.3, you can use top-level await
in the REPL 开始到动态 import
模块:
> const path = await import("https://deno.land/std@0.73.0/path/mod.ts")
> path.basename("/my/path/name")
"name"