Skip to content

统计tags - 很丑的方案

方案:创建自定义组件

创建组件在 .vitepress/theme/components/TagTree.vue

vue
<script setup>
  import { data as posts } from '../../posts.data'
  import { computed } from 'vue'

  const tagTree = computed(() => {
    const tree = {}
    posts.forEach(post => {
      post.tags?.forEach(tag => {
        const parts = tag.split('/')
        let node = tree
        parts.forEach(part => {
          if (!node[part]) node[part] = { _count: 0 }
          node[part]._count++
          node = node[part]
        })
      })
    })
    return tree
  })
</script>

<template>
  <div class="tag-tree">
    <h2>Tags</h2>
    <pre>{{ tagTree }}</pre>
  </div>
</template>

.vitepress/theme/index.ts 改成这样:

typescript
import { h } from 'vue'
import type { Theme } from 'vitepress'
import DefaultTheme from 'vitepress/theme'
import TagTree from './components/TagTree.vue' // 增加
import './style.css'

export default {
	extends: DefaultTheme,
	Layout: () => {
	  return h(DefaultTheme.Layout, null, {
		'home-features-after': () => h(TagTree) //增加
	  })
	},
	enhanceApp({ app, router, siteData }) {
	  // ...
	}
} satisfies Theme