skills/slidev/references/core-hosting.md
Build and deploy Slidev presentations.
slidev build
Output: dist/ folder (static SPA)
slidev build --base /talks/my-talk/ # Custom base path
slidev build --out public # Custom output dir
slidev build --download # Include PDF
slidev build --without-notes # Exclude notes
slidev build slides1.md slides2.md
Create .github/workflows/deploy.yml:
name: Deploy
on:
push:
branches: [main]
permissions:
contents: read
pages: write
id-token: write
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 'lts/*'
- name: Install
run: npm install
- name: Build
run: npm run build -- --base /${{ github.event.repository.name }}/
- uses: actions/configure-pages@v4
- uses: actions/upload-pages-artifact@v3
with:
path: dist
- uses: actions/deploy-pages@v4
Create netlify.toml:
[build]
publish = 'dist'
command = 'npm run build'
[[redirects]]
from = '/*'
to = '/index.html'
status = 200
Create vercel.json:
{
"rewrites": [
{ "source": "/(.*)", "destination": "/index.html" }
]
}
docker run --name slidev --rm -it \
-v ${PWD}:/slidev \
-p 3030:3030 \
tangramor/slidev:latest
FROM tangramor/slidev:latest
COPY slides.md .
COPY public ./public
RUN npm run build
EXPOSE 80
CMD ["npx", "serve", "dist"]
For subdirectory deployment:
# Build
slidev build --base /my-slides/
# Or in headmatter
---
base: /my-slides/
---
For servers without rewrite support:
---
routerMode: hash
---
URLs become: /#/1, /#/2, etc.