svelte marked shiki示例
pnpm create vite
cd demo
pnpm install tailwindcss @tailwindcss/vite -D
pnpm i @tailwindcss/typography @tailwindcss/forms -D
pnpm i daisyui -D
vite.config.js
:
import tailwindcss from "@tailwindcss/vite";
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [sveltekit(), tailwindcss()]
});
pnpm i marked shiki marked-shiki
@import "tailwindcss";
@plugin "@tailwindcss/typography";
@plugin "@tailwindcss/forms";
@plugin "daisyui";
src/lib/MarkdownRenderer.svelte
:
<script lang="ts">
import { onMount } from "svelte";
import { marked } from "marked";
import markedShiki from "marked-shiki";
import { codeToHtml } from "shiki";
let htmlContent = $state("");
const { markdown } = $props();
onMount(async () => {
htmlContent = await marked
.use(
markedShiki({
async highlight(code, lang) {
return await codeToHtml(code, { lang, theme: "github-dark" });
},
container: `<figure class="highlighted-code">
<button class="btn-copy">Copy</button>
%s
</figure>
`,
}),
)
.parse(markdown);
});
</script>
{#if htmlContent}
<div class="max-w-full prose">
{@html htmlContent}
</div>
{:else}
<div>Loading...</div>
{/if}
App.svelte
:
<script>
import MarkdownRenderer from "./lib/MarkdownRenderer.svelte";
const content = `
# Hello Shiki!
This is a simple Svelte app that uses Shiki to render Markdown.
Here's some JavaScript code:
\`\`\`javascript
function hello() {
console.log('Hello Shiki!');
}
\`\`\`
`;
</script>
<MarkdownRenderer markdown={content} />
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?