Skip to content

◷ 发表于: 2025-03-18

◷ 更新于: 2025-08-01

🅆 字数: 0

配置 vitepress-plugin-pagefind

基于 pagefind 实现的离线全文搜索

最终效果如下

pagefind

下载依赖

sh
$ npm i vitepress-plugin-pagefind pagefind
sh
$ pnpm add vitepress-plugin-pagefind pagefind
sh
$ yarn add vitepress-plugin-pagefind pagefind

引入插件

文件路径 .vitepress/config.mts

typescript
import { defineConfig } from "vitepress";
import { pagefindPlugin } from "vitepress-plugin-pagefind";

// https://vitepress.dev/reference/site-config
export default defineConfig({
  vite: {
    plugins: [pagefindPlugin()],
  },
});

中文搜索优化

文件路径 .vitepress/config.mts

typescript
import { defineConfig } from 'vitepress'
import { pagefindPlugin } from 'vitepress-plugin-pagefind'

// https://vitepress.dev/reference/site-config
export default defineConfig({
  vite: {
    plugins: [pagefindPlugin({
        customSearchQuery: (input: string) => {
            const segmenter = new Intl.Segmenter('zh-CN', { granularity: 'word' })
            const result: string[] = []
            for (const it of segmenter.segment(input)) {
                it.isWordLike && result.push(it.segment)
            }
            return result.join(' ');
        }
    })],
  }
})

其他配置

文件路径 .vitepress/config.mts

typescript
import { defineConfig } from 'vitepress'
import { chineseSearchOptimize as customSearchQuery, pagefindPlugin } from 'vitepress-plugin-pagefind'

// https://vitepress.dev/reference/site-config
export default defineConfig({
  vite: {
    plugins: [pagefindPlugin({
        btnPlaceholder: '搜索',
        placeholder: '搜索文档',
        emptyText: '空空如也',
        heading: '共: {{searchResult}} 条结果',
        excludeSelector: ['img', 'a.header-anchor'],
        forceLanguage: 'zh-cn',
        customSearchQuery: (input: string) => {
            const segmenter = new Intl.Segmenter('zh-CN', { granularity: 'word' })
            const result: string[] = []
            for (const it of segmenter.segment(input)) {
                it.isWordLike && result.push(it.segment)
            }
            return result.join(' ');
        },
        filter(searchItem, idx, originArray) {
            return !searchItem.route.includes('404')
        }
    })],
  }
})

编译时控制台输出

sh
=== pagefind: https://pagefind.app/ ===
npx pagefind --site "D:/Workspace/wiki/.vitepress/dist" --exclude-selectors "div.aside, a.header-anchor, img" --force-language en


Running Pagefind v1.3.0 (Extended)
Running from: "D:\\Workspace\\wiki"
Source:       ".vitepress/dist"
Output:       ".vitepress/dist\\pagefind"

[Walking source directory]
Found 35 files matching **/*.{html}

[Parsing files]
Found a data-pagefind-body element on the site.
 Ignoring pages without this tag.

[Reading languages]
Discovered 1 language: zh-cn

[Building search indexes]
Total:
  Indexed 1 language
  Indexed 33 pages
  Indexed 2218 words
  Indexed 0 filters
  Indexed 0 sorts

Finished in 0.134 seconds
 generating pagefind Indexing..

基于 CC BY-NC-SA 4.0 许可发布