Skip to content

VitePress 极简主题:完整示例 ​

为了启用主题的所有功能(加密、草稿、隐藏、描述、信息等),还需要做一些配置。

config.ts ​

.vitepress/config.ts
ts
import { defineConfig } from 'vitepress';
import { usePosts } from '../src/composables/usePosts.ts';
import { themeTransformPageData } from '../src/utils/themeTransformPageData.ts';
import { themeMdPlugin } from '../src/utils/themeMdPlugin.ts';
import type { ThemeConfig } from '../src/types.ts';

const { posts, hiddenPosts, excludePosts, rewrites } = await usePosts({
  pageSize: 6,
  folder: [
    { input: 'posts', index: false },
    { input: 'essays', name: '散文' }
  ],
  excerpt: 150
});

export default defineConfig<ThemeConfig>({
  rewrites,
  lastUpdated: true,
  // 在 sitemap 中移除隐藏文章
  sitemap: {
    hostname: 'https://example.com',
    transformItems: (items) => {
      return items.filter((item) => !hiddenPosts.has(item.url.replace(/\.html$/, '')));
    }
  },
  transformPageData(pageData, ctx) {
    themeTransformPageData(pageData, ctx);
  },
  themeConfig: {
    posts,
    slots: {
      docAfter: 'DocAfterAd',
    },
    page: {
      max: 5
    },
    transition: true
  },
  markdown: {
    lineNumbers: true,
    config: (md) => {
      md.use(themeMdPlugin);
    }
  },
  // 草稿
  srcExclude: [...excludePosts]
});

ThemeLayout.vue ​

.vitepress/theme/ThemeLayout.vue
vue
<template>
  <Layout>
    <template #aside-outline-before>
      <ShareItem />
    </template>
    <template #doc-footer-before>
      <Copyright />
    </template>
    <template #doc-after>
      <PrevNext />
      <AdItem :custom="ads" type="doc" />
      <AdItem :adsense="adsense" type="doc" />
      <CommentItem />
    </template>
  </Layout>

</template>

<script lang="ts" setup>
import DefaultTheme from 'vitepress/theme';
import type { IAdsense } from '../../src/types.ts';
import PrevNext from '../../src/components/PrevNext.vue';
import Copyright from '../../src/components/Copyright.vue';
import AdItem from '../../src/components/AdItem.vue';
import ShareItem from '../../src/components/ShareItem.vue';
import CommentItem from './components/CommentItem.vue';
import { ads } from './ads.ts';

const adsense: IAdsense = {
  client: 'XXXX',
  slot: 'XXXX'
};
const { Layout } = DefaultTheme;
</script>
公众号
关注 “只抄” 获取最新技术干货与动态
扫码关注扫码关注
优化线路
Evoxt

Evoxt

最便宜的亚太优化线路

马来西亚 电信 GIA / 联通 9929
优惠码:AFF2377-DEV

1C / 512MB / 5GB SSD / 150GB 流量

$3.32/月
优化线路
搬瓦工

搬瓦工

15 个机房自由切换

洛杉矶 DC6 机房
电信 / 联通 GIA + 移动 CMIN2

2C / 2GB / 40GB SSD / 1TB 流量

$49.99/季