Loading...
Loading...
Deploy Slidev presentations to the web. Use this skill for GitHub Pages, Netlify, Vercel, and Docker deployments.
npx skill4agent add yoanbernabeu/slidev-skills slidev-deploymentnpx slidev buildnpm run builddist/index.html# Custom output directory
npx slidev build --out public
# With base path (for subdirectories)
npx slidev build --base /presentations/my-talk/
# Enable PDF download
npx slidev build --download
# Exclude presenter notes (security)
npx slidev build --without-notes.github/workflows/deploy.ymlname: Deploy Slidev
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build -- --base /${{ github.event.repository.name }}/
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: dist
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4https://<username>.github.io/<repo>/npm install -D gh-pagespackage.json{
"scripts": {
"deploy": "slidev build --base /repo-name/ && gh-pages -d dist"
}
}npm run deploynpm run builddistnetlify.toml[build]
command = "npm run build"
publish = "dist"
[build.environment]
NODE_VERSION = "20"
[[redirects]]
from = "/*"
to = "/index.html"
status = 200npm install -g vercel
vercelvercel.json{
"buildCommand": "npm run build",
"outputDirectory": "dist",
"framework": null,
"rewrites": [
{ "source": "/(.*)", "destination": "/index.html" }
]
}npm run builddistname = "my-presentation"
compatibility_date = "2024-01-01"
[site]
bucket = "./dist"FROM node:20-alpine as builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
}docker build -t my-presentation .
docker run -p 8080:80 my-presentationversion: '3.8'
services:
presentation:
build: .
ports:
- "8080:80"
restart: unless-stoppednpm install -g serve
npm run build
serve distnpm install -g http-server
npm run build
http-server distnpm run build
cd dist
python -m http.server 8080https://example.com/slides/npx slidev build --base /slides/---
base: /slides/
---https://example.com/npx slidev build --base /npx slidev build --without-notes.envVITE_API_URL=https://api.example.com<script setup>
const apiUrl = import.meta.env.VITE_API_URL
</script>| Type | Name | Value |
|---|---|---|
| CNAME | www | platform-subdomain |
| A | @ | Platform IP |
name: Build and Deploy
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install
run: npm ci
- name: Build
run: npm run build
- name: Export PDF
run: npm run export
- name: Upload Build
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
- name: Upload PDF
uses: actions/upload-artifact@v4
with:
name: pdf
path: '*.pdf'
deploy:
needs: build
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Download Build
uses: actions/download-artifact@v4
with:
name: dist
path: dist/
- name: Deploy to Production
# Add your deployment steprm -rf node_modules && npm install/npm run build && npx serve distPLATFORM: [GitHub Pages | Netlify | Vercel | Docker]
BUILD COMMAND:
npm run build --base [path]
CONFIGURATION FILES:
- [config file name and content]
DEPLOYMENT URL:
https://[your-domain]/[path]/
CHECKLIST:
- [ ] Build succeeds locally
- [ ] Assets load correctly
- [ ] Base path configured
- [ ] SSL/HTTPS enabled
- [ ] (Optional) Custom domain
- [ ] (Optional) Password protection