feat(plugin-blog-data): 添加支持生成额外的博客数据

This commit is contained in:
pengzhanbo 2024-02-02 09:46:10 +08:00
parent 9952a3fd85
commit 5f280420ef
4 changed files with 35 additions and 6 deletions

View File

@ -1,8 +1,9 @@
import themePlume from 'vuepress-theme-plume'
import type { Theme } from 'vuepress'
import { enNotes, zhNotes } from './notes.js'
import { enNavbar, zhNavbar } from './navbar.js'
export const theme = themePlume({
export const theme: Theme = themePlume({
logo: 'https://pengzhanbo.cn/g.gif',
hostname: 'https://pengzhanbo.cn',
repo: 'https://github.com/pengzhanbo/vuepress-theme-plume',
@ -15,6 +16,7 @@ export const theme = themePlume({
},
social: [{ icon: 'github', link: 'https://github.com/pengzhanbo' }],
footer: { copyright: 'Copyright © 2022-present pengzhanbo' },
locales: {

View File

@ -2,6 +2,7 @@ import type { BlogPostData } from '../shared/index.js'
declare module '@internal/blogData' {
const blogPostData: BlogPostData
const extraBlogData: Record<string, any>
export { blogPostData }
export { blogPostData, extraBlogData }
}

View File

@ -1,4 +1,7 @@
import { blogPostData as blogPostDataRaw } from '@internal/blogData'
import {
blogPostData as blogPostDataRaw,
extraBlogData as extraBlogDataRaw,
} from '@internal/blogData'
import { ref } from 'vue'
import type { Ref } from 'vue'
import type { BlogPostData } from '../../shared/index.js'
@ -15,8 +18,19 @@ export function useBlogPostData<
return blogPostData as BlogDataRef<T>
}
export type ExtraBlogDataRef = Ref<Record<string, any>>
export const extraBlogData: ExtraBlogDataRef = ref(extraBlogDataRaw)
export function useExtraBlogData(): ExtraBlogDataRef {
return extraBlogData as ExtraBlogDataRef
}
if (__VUEPRESS_DEV__ && (import.meta.webpackHot || import.meta.hot)) {
__VUE_HMR_RUNTIME__.updateBlogData = (data: BlogPostData) => {
blogPostData.value = data
}
__VUE_HMR_RUNTIME__.updateExtraBlogData = (data: Record<string, any>) => {
extraBlogData.value = data
}
}

View File

@ -8,11 +8,15 @@ if (import.meta.webpackHot) {
if (__VUE_HMR_RUNTIME__.updateBlogData) {
__VUE_HMR_RUNTIME__.updateBlogData(blogPostData)
}
if (__VUE_HMR_RUNTIME__.updateExtraBlogData) {
__VUE_HMR_RUNTIME__.updateExtraBlogData(extraBlogData)
}
}
if (import.meta.hot) {
import.meta.hot.accept(({ blogPostData }) => {
import.meta.hot.accept(({ blogPostData, extraBlogData }) => {
__VUE_HMR_RUNTIME__.updateBlogData(blogPostData)
__VUE_HMR_RUNTIME__.updateExtraBlogData(extraBlogData)
})
}
`
@ -47,10 +51,15 @@ export async function preparedBlogData(app: App, pageFilter: (id: string) => boo
})
}
const extraBlogData: Record<string, any> = {}
if (typeof options.extraBlogData === 'function')
options.extraBlogData(extraBlogData)
const blogData: BlogPostData = pages.map((page: Page) => {
let extended: Partial<BlogPostDataItem> = {}
if (typeof options.extendBlogData === 'function')
extended = options.extendBlogData(page)
extended = options.extendBlogData(page, extraBlogData)
const data = {
path: page.path,
@ -69,7 +78,10 @@ export async function preparedBlogData(app: App, pageFilter: (id: string) => boo
let content = `\
export const blogPostData = JSON.parse(${JSON.stringify(
JSON.stringify(blogData),
)})
)});
export const extraBlogData = JSON.parse(${JSON.stringify(
JSON.stringify(extraBlogData),
)});
`
// inject HMR code