Structure du répertoire
Slidev utilise certaines conventions de structure de répertoires pour minimiser la surface de configuration et rendre les extensions de fonctionnalités flexibles et intuitives.
La structure de base est la suivante :
your-slidev/
├── components/ # composants customisés
├── layouts/ # mises en page customisées
├── public/ # assets statiques
├── setup/ # configuration personnalisée / hooks
├── styles/ # style personnalisé
├── index.html # injections dans index.html
├── slides.md # l'entrée principale des diapositives
├── vite.config.ts # extension de vite config
Tous sont facultatifs.
Composants
Conventions: ./components/*.{vue,js,ts,jsx,tsx,md}
Les composants à l'intérieur de ce répertoire peuvent être directement utilisés dans les diapositives Markdown avec le même nom de composant que le nom de fichier.
Par exemple :
your-slidev/
├── ...
└── components/
├── MyComponent.vue
└── HelloWorld.ts
<!-- slides.md -->
# My Slide
<MyComponent :count="4"/>
<!-- Les deux appellations fonctionnent -->
<hello-world foo="bar">
Slot
</hello-world>
Cette fonctionnalité est alimentée par unplugin-vue-components
, apprenez-en plus ici.
Slidev fournit également des composants intégrés que vous pouvez utiliser.
Mises en page
Conventions : ./layouts/*.{vue,js,ts,jsx,tsx}
your-slidev/
├── ...
└── layouts/
├── cover.vue
└── my-cool-theme.vue
Vous pouvez utiliser n'importe quel nom de fichier pour votre mise en page. Vous référencez ensuite votre mise en page dans votre en-tête YAML en utilisant le nom de fichier.
---
layout: my-cool-theme
---
Si la mise en page que vous fournissez porte le même nom qu'une mise en page intégrée ou une mise en page de thème, votre mise en page personnalisée prévaudra sur la mise en page intégrée / thème. L'ordre de priorité est local > thème > intégré
.
Dans le composant de mise en page, utilisez <slot />
pour le contenu de la diapositive. Par exemple :
<!-- default.vue -->
<template>
<div class="slidev-layout default">
<slot />
</div>
</template>
Public
Conventions : ./public/*
Les actifs de ce répertoire seront servis à la racine du chemin /
pendant le développement, et copiés à la racine du répertoire dist tels quels. En savoir plus sur le répertoire public
de Vite.
Style
Conventions : ./style.css
| ./styles/index.{css,js,ts}
Les fichiers suivant cette convention seront injectés à la racine de l'application. Si vous devez importer plusieurs entrées CSS, vous pouvez créer la structure suivante et gérer vous-même l'ordre d'importation.
your-slidev/
├── ...
└── styles/
├── index.ts
├── base.css
├── code.css
└── layouts.css
// styles/index.ts
import './base.css'
import './code.css'
import './layouts.css'
Les styles seront traités par Windi CSS et PostCSS, vous pouvez donc utiliser l'imbrication css et at-directives prêt à l'emploi. Par exemple :
.slidev-layout {
@apply px-14 py-10 text-[1.1rem];
h1, h2, h3, h4, p, div {
@apply select-none;
}
pre, code {
@apply select-text;
}
a {
color: theme('colors.primary');
}
}
En savoir plus sur la syntaxe.
index.html
Conventions : index.html
Le index.html
offre la possibilité d'injecter des balises meta et/ou des scripts dans le index.html
principal
Par exemple, pour le index.html
personnalisé suivant :
<!-- ./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>
Le fichier index.html
final hébergé sera :
<!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>
<!-- injected body -->
<script src="./your-scripts"></script>
</body>
</html>
Couches globales
Conventions : global-top.vue
| global-bottom.vue
En savoir plus: Couches globales