perf(theme): use vuepress virtual routes
This commit is contained in:
parent
d98785ada7
commit
24261ab269
@ -5,9 +5,9 @@
|
|||||||
<h2 align="center">vuepress-theme-plume</h2>
|
<h2 align="center">vuepress-theme-plume</h2>
|
||||||
|
|
||||||
[](https://www.npmjs.com/package/vuepress-theme-plume)
|
[](https://www.npmjs.com/package/vuepress-theme-plume)
|
||||||
[](https://www.npmjs.com/package/vuepress-theme-plume)
|
|
||||||
[](https://www.npmjs.com/package/vuepress-theme-plume)
|
[](https://www.npmjs.com/package/vuepress-theme-plume)
|
||||||

|

|
||||||
|
<!-- [](https://www.npmjs.com/package/vuepress-theme-plume) -->
|
||||||
|
|
||||||
一个简约的,干净的,容易上手的 vuepress 主题,适用于博客和文档。
|
一个简约的,干净的,容易上手的 vuepress 主题,适用于博客和文档。
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vuepress/client'
|
||||||
import { EXTERNAL_URL_RE, normalizeLink } from '../utils/index.js'
|
import { EXTERNAL_URL_RE, normalizeLink } from '../utils/index.js'
|
||||||
import IconExternalLink from './icons/IconExternalLink.vue'
|
import IconExternalLink from './icons/IconExternalLink.vue'
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { useScrollLock } from '@vueuse/core'
|
import { useScrollLock } from '@vueuse/core'
|
||||||
import { computed, ref, watch } from 'vue'
|
import { computed, ref, watch } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vuepress/client'
|
||||||
import { useBlogExtract, useThemeLocaleData } from '../composables/index.js'
|
import { useBlogExtract, useThemeLocaleData } from '../composables/index.js'
|
||||||
import { inBrowser } from '../utils/index.js'
|
import { inBrowser } from '../utils/index.js'
|
||||||
import AutoLink from './AutoLink.vue'
|
import AutoLink from './AutoLink.vue'
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vuepress/client'
|
||||||
import { useBlogExtract } from '../composables/index.js'
|
import { useBlogExtract } from '../composables/index.js'
|
||||||
import AutoLink from './AutoLink.vue'
|
import AutoLink from './AutoLink.vue'
|
||||||
import IconArchive from './icons/IconArchive.vue'
|
import IconArchive from './icons/IconArchive.vue'
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, watch } from 'vue'
|
import { ref, watch } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vuepress/client'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const backToTop = ref()
|
const backToTop = ref()
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vuepress/client'
|
||||||
import { EXTERNAL_URL_RE } from '../utils/index.js'
|
import { EXTERNAL_URL_RE } from '../utils/index.js'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import type { Ref } from 'vue'
|
import type { Ref } from 'vue'
|
||||||
import { ref, watch } from 'vue'
|
import { ref, watch } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vuepress/client'
|
||||||
|
|
||||||
export interface UseNavReturn {
|
export interface UseNavReturn {
|
||||||
isScreenOpen: Ref<boolean>
|
isScreenOpen: Ref<boolean>
|
||||||
|
|||||||
@ -1,10 +1,9 @@
|
|||||||
import { usePageData, usePageFrontmatter, usePageLang } from 'vuepress/client'
|
import { usePageData, usePageFrontmatter, usePageLang, useRoute } from 'vuepress/client'
|
||||||
import { isPlainObject, isString } from 'vuepress/shared'
|
import { isPlainObject, isString } from 'vuepress/shared'
|
||||||
import { useBlogPostData } from '@vuepress-plume/plugin-blog-data/client'
|
import { useBlogPostData } from '@vuepress-plume/plugin-blog-data/client'
|
||||||
import type { NotesSidebarItem } from '@vuepress-plume/plugin-notes-data'
|
import type { NotesSidebarItem } from '@vuepress-plume/plugin-notes-data'
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import type { ComputedRef, Ref } from 'vue'
|
import type { ComputedRef, Ref } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
|
||||||
import type {
|
import type {
|
||||||
NavItemWithLink,
|
NavItemWithLink,
|
||||||
PlumeThemeBlogPostItem,
|
PlumeThemeBlogPostItem,
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import type { PageData } from 'vuepress/client'
|
import type { PageData } from 'vuepress/client'
|
||||||
import { usePageData, usePageFrontmatter, withBase } from 'vuepress/client'
|
import { usePageData, usePageFrontmatter, useRoute, withBase } from 'vuepress/client'
|
||||||
import type {
|
import type {
|
||||||
NotesData,
|
NotesData,
|
||||||
NotesSidebarItem,
|
NotesSidebarItem,
|
||||||
@ -8,7 +8,6 @@ import { useNotesData } from '@vuepress-plume/plugin-notes-data/client'
|
|||||||
import { useMediaQuery } from '@vueuse/core'
|
import { useMediaQuery } from '@vueuse/core'
|
||||||
import type { ComputedRef, Ref } from 'vue'
|
import type { ComputedRef, Ref } from 'vue'
|
||||||
import { computed, onMounted, onUnmounted, ref, watchEffect } from 'vue'
|
import { computed, onMounted, onUnmounted, ref, watchEffect } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
|
||||||
import type { PlumeThemePageData } from '../../shared/index.js'
|
import type { PlumeThemePageData } from '../../shared/index.js'
|
||||||
import { isActive } from '../utils/index.js'
|
import { isActive } from '../utils/index.js'
|
||||||
import { useThemeLocaleData } from './themeData.js'
|
import { useThemeLocaleData } from './themeData.js'
|
||||||
|
|||||||
@ -1,14 +1,8 @@
|
|||||||
import { isFunction, isString } from 'vuepress/shared'
|
import { isFunction, isString } from 'vuepress/shared'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vuepress/client'
|
||||||
import type { Router } from 'vue-router'
|
import type { Router } from 'vuepress/client'
|
||||||
import type { NavItemWithLink } from '../../shared/index.js'
|
import type { NavItemWithLink } from '../../shared/index.js'
|
||||||
|
|
||||||
declare module 'vue-router' {
|
|
||||||
interface RouteMeta {
|
|
||||||
title?: string
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolve a route with redirection
|
* Resolve a route with redirection
|
||||||
*/
|
*/
|
||||||
@ -45,7 +39,7 @@ export function useNavLink(item: string): NavItemWithLink {
|
|||||||
// resolve the route correctly
|
// resolve the route correctly
|
||||||
const resolved = useResolveRouteWithRedirect(encodeURI(item))
|
const resolved = useResolveRouteWithRedirect(encodeURI(item))
|
||||||
return {
|
return {
|
||||||
text: resolved.meta.title || item,
|
text: (resolved.meta as any).title || item,
|
||||||
link: resolved.name === '404' ? item : resolved.fullPath,
|
link: resolved.name === '404' ? item : resolved.fullPath,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { customRef, nextTick, toValue, watch } from 'vue'
|
import { customRef, nextTick, toValue, watch } from 'vue'
|
||||||
import type { MaybeRef, MaybeRefOrGetter, Ref } from 'vue'
|
import type { MaybeRef, MaybeRefOrGetter, Ref } from 'vue'
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vuepress/client'
|
||||||
import type { RouteParamValueRaw, Router } from 'vue-router'
|
import type { RouteParamValueRaw, Router } from 'vue-router'
|
||||||
import { tryOnScopeDispose } from '@vueuse/core'
|
import { tryOnScopeDispose } from '@vueuse/core'
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { usePageData } from 'vuepress/client'
|
import { usePageData, useRoute } from 'vuepress/client'
|
||||||
import { computed, provide, watch } from 'vue'
|
import { computed, provide, watch } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
|
||||||
import type { PlumeThemePageData } from '../../shared/index.js'
|
import type { PlumeThemePageData } from '../../shared/index.js'
|
||||||
import Backdrop from '../components/Backdrop.vue'
|
import Backdrop from '../components/Backdrop.vue'
|
||||||
import Blog from '../components/Blog.vue'
|
import Blog from '../components/Blog.vue'
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user