Skip to content

目录结构

Slidev 对目录结构进行了一些约定,以尽量减少配置项,并使功能扩展更加灵活直观。

基本结构如下所示:

bash
your-slidev/
  ├── components/       # 自定义组件
  ├── layouts/          # 自定义布局
  ├── public/           # 静态资源
  ├── setup/            # 自定义 setup / hooks
  ├── snippets/         # 代码片段
  ├── styles/           # 自定义样式
  ├── index.html        # 注入的 index.html
  ├── slides.md         # 幻灯片主入口
  └── vite.config.ts    # 扩展 vite 配置

以上所有均为可选。

组件

约定路径: ./components/*.{vue,js,ts,jsx,tsx,md}

📖 组件

布局

约定路径: ./layouts/*.{vue,js,ts,jsx,tsx}

📖 布局

静态资源

约定路径: ./public/*

开发过程中,此目录中的资源文件将在 / 下提供,并会按原样复制到 dist 目录的根目录中。欲了解更多,请参阅 处理静态资源

样式

约定路径: ./style.css | ./styles/index.{css,js,ts}

遵循上述约定路径的文件将被注入到 App 的根目录中。如果需要引入多个 css 入口,可以按如下方式创建结构并自行管理引入顺序。

bash
your-slidev/
  ├── ...
  └── styles/
      ├── index.ts
      ├── base.css
      ├── code.css
      └── layouts.css
ts
// styles/index.ts

import './base.css'
import './code.css'
import './layouts.css'

得益于 UnoCSSPostCSS,样式中可以使用 css 嵌套和 at-directives。示例:

css
.slidev-layout {
  --uno: px-14 py-10 text-[1.1rem];

  h1, h2, h3, h4, p, div {
    --uno: select-none;
  }

  pre, code {
    --uno: select-text;
  }

  a {
    color: theme('colors.primary');
  }
}

了解更多关于此语法的信息

index.html

约定路径: index.html

index.html 提供了向主 index.html 中注入 meta 标签以及 scripts 标签的能力。

例如,对于以下自定义 index.html 来说:

html
<!-- ./index.html -->
<head>
  <link rel="preconnect" href="https://fonts.gstatic.com">
  <link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;600&family=Nunito+Sans:wght@200;400;600&display=swap" rel="stylesheet">
</head>

<body>
  <script src="./your-scripts"></script>
</body>

最终部署的 index.html 效果如下:

html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/slidevjs/slidev/assets/favicon.png">
  <!-- injected head -->
  <link rel="preconnect" href="https://fonts.gstatic.com">
  <link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;600&family=Nunito+Sans:wght@200;400;600&display=swap" rel="stylesheet">
</head>
<body>
  <div id="app"></div>
  <script type="module" src="__ENTRY__"></script>
  <!-- 注入的 body -->
  <script src="./your-scripts"></script>
</body>
</html>

全局图层

约定路径: global-top.vue | global-bottom.vue | custom-nav-controls.vue | layouts/slide-top.vue | layouts/slide-bottom.vue

✨ 全局图层

Released under the MIT License.