feat(plugin-blog-data): 添加支持生成额外的博客数据
This commit is contained in:
parent
9952a3fd85
commit
5f280420ef
@ -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: {
|
||||
|
||||
@ -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 }
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user