Skip to content

配置代码运行器

运行环境: client
该文件中的代码将仅在浏览器中运行。导入包时请确保浏览器兼容性。

在 Monaco 代码运行器中运行自定义语言。

Slidev 内置了对 JavaScript 与 TypeScript 运行器。 它们能直接在浏览器中运行,但 没有 沙盒环境的保护。 如果你想要更高级的集成, 你可以提供自己的代码运行器,将代码发送到远程服务器、在 Web Worker 中运行,或者以你希望的任何方式运行。

你需要创建含以下内容的 ./setup/code-runners.ts 文件:

ts
import { 
defineCodeRunnersSetup
} from '@slidev/types'
export default
defineCodeRunnersSetup
(() => {
return { async
python
(
code
,
ctx
) {
// 以某种方式执行代码并获取输出 const
result
= await
executePythonCodeRemotely
(
code
)
return {
text
:
result
} },
html
(
code
,
ctx
) {
return {
html
:
sanitizeHtml
(
code
)
} }, // 也可以添加其他语言。键是语言id,值是运行器函数 } })

运行上下文

第二个传入参数 ctx 是运行的上下文, 包含了以下属性:

ts
export interface CodeRunnerContext {
  /**
   * 通过 `runnerOptions` 属性传递给运行器的选项。
   */
  
options
:
Record
<string, unknown>
/** * 使用 Shiki 高亮代码。 */
highlight
: (
code
: string,
lang
: string,
options
?:
Partial
<
CodeToHastOptions
>) => string
/** * 使用其他代码运行器运行代码。 */
run
: (
code
: string,
lang
: string) =>
Promise
<
CodeRunnerOutputs
>
}

运行器输出

运行器可以返回文本或 HTML 输出,或者一个要挂载的 HTML 元素。更多详情请参考 code-runner.ts 的类型定义。

附加运行依赖

默认地,Slidev 将扫描 Markdown 源文件并自动为运行器导入必要的 JavaScript 依赖项。如果你希望手动指定依赖,你可以在 slide 的 frontmatter 中使用 monacoRunAdditionalDeps 选项:

yaml
monacoRunAdditionalDeps:
  - ./path/to/dependency
  - lodash-es

TIP

这些路径是相对于 snippets 目录解析的。并且依赖项的名称应该与代码中导入的名称完全相同。

Released under the MIT License.