Skip to content

统计tags - 404方案

方案:为文章添加frontmatter,用 createContentLoader 收集数据,首页自定义组件显示。

frontmatter示例:

yaml
  ---
  date: 2026-03-31
  tags:
    - Knowledge/Architecture
    - Resources/讲
  ---

创建 .vitepress/posts.data.ts

typescript
import { createContentLoader } from 'vitepress'

export default createContentLoader('**/*.md', {
	transform(rawData) {
	  return rawData
		.filter(page => page.frontmatter.tags)
		.map(page => ({
		  url: page.url,
		  title: page.frontmatter.title,
		  date: page.frontmatter.date,
		  tags: page.frontmatter.tags as string[]
		}))
	}
})

index.md 中引入组件:

markdown
<script setup>
  import TagTree from
  './.vitepress/theme/components/TagTree.vue'
</script>

<TagTree />

创建组件在 .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>