feat: use unhead v2 (#549)
Co-authored-by: Anthony Fu <github@antfu.me>
This commit is contained in:
1 parent
73f71ecb7d
commit
63fde48052
9 files changed
+363
-213
No files matched your search
@@ -92,7 +92,7 @@ Mocking up web app with <b>Vitesse</b><sup><em>(speed)</em></sup><br>
|
||||
- [`unplugin-vue-i18n`](https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n) - unplugin for Vue I18n
|
||||
- [VueUse](https://github.com/antfu/vueuse) - collection of useful composition APIs
|
||||
- [`vite-ssg-sitemap`](https://github.com/jbaubree/vite-ssg-sitemap) - Sitemap generator
|
||||
- [`@vueuse/head`](https://github.com/vueuse/head) - manipulate document head reactively
|
||||
- [`@unhead/vue v2`](https://github.com/unjs/unhead) - manipulate document head reactively
|
||||
- [`vite-plugin-vue-devtools`](https://github.com/vuejs/devtools-next) - Designed to enhance the Vue developer experience.
|
||||
|
||||
### Coding Style
|
||||
|
||||
+2
-3
@@ -17,10 +17,9 @@
|
||||
"sizecheck": "npx vite-bundle-visualizer"
|
||||
},
|
||||
"dependencies": {
|
||||
"@unhead/vue": "^1.11.15",
|
||||
"@unhead/vue": "^2.0.1",
|
||||
"@unocss/reset": "^65.4.0",
|
||||
"@vueuse/core": "^12.4.0",
|
||||
"@vueuse/head": "^2.0.0",
|
||||
"beasties": "^0.2.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"pinia": "^2.3.0",
|
||||
@@ -67,7 +66,7 @@
|
||||
"vite-plugin-pwa": "^0.21.1",
|
||||
"vite-plugin-vue-devtools": "^7.7.0",
|
||||
"vite-plugin-vue-layouts": "^0.11.0",
|
||||
"vite-ssg": "^25.0.0",
|
||||
"vite-ssg": "^26.0.0",
|
||||
"vite-ssg-sitemap": "^0.8.1",
|
||||
"vitest": "^2.1.8",
|
||||
"vue-tsc": "^2.2.0"
|
||||
|
||||
Generated
+325
-203
File diff suppressed because it is too large.
Load diff
Vendored
+17
-4
@@ -35,11 +35,13 @@ declare global {
|
||||
const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
|
||||
const effectScope: typeof import('vue')['effectScope']
|
||||
const extendRef: typeof import('@vueuse/core')['extendRef']
|
||||
const getActiveHead: typeof import('@unhead/vue')['getActiveHead']
|
||||
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
||||
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
||||
const h: typeof import('vue')['h']
|
||||
const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
|
||||
const inject: typeof import('vue')['inject']
|
||||
const injectHead: typeof import('@unhead/vue')['injectHead']
|
||||
const injectLocal: typeof import('@vueuse/core')['injectLocal']
|
||||
const isDark: typeof import('./composables/dark')['isDark']
|
||||
const isDefined: typeof import('@vueuse/core')['isDefined']
|
||||
@@ -58,6 +60,7 @@ declare global {
|
||||
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
||||
const onClickOutside: typeof import('@vueuse/core')['onClickOutside']
|
||||
const onDeactivated: typeof import('vue')['onDeactivated']
|
||||
const onElementRemoval: typeof import('@vueuse/core')['onElementRemoval']
|
||||
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
||||
const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
|
||||
const onLongPress: typeof import('@vueuse/core')['onLongPress']
|
||||
@@ -180,7 +183,8 @@ declare global {
|
||||
const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
|
||||
const useGamepad: typeof import('@vueuse/core')['useGamepad']
|
||||
const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
|
||||
const useHead: typeof import('@vueuse/head')['useHead']
|
||||
const useHead: typeof import('@unhead/vue')['useHead']
|
||||
const useHeadSafe: typeof import('@unhead/vue')['useHeadSafe']
|
||||
const useI18n: typeof import('vue-i18n')['useI18n']
|
||||
const useId: typeof import('vue')['useId']
|
||||
const useIdle: typeof import('@vueuse/core')['useIdle']
|
||||
@@ -237,7 +241,10 @@ declare global {
|
||||
const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
|
||||
const useScroll: typeof import('@vueuse/core')['useScroll']
|
||||
const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
|
||||
const useSeoMeta: typeof import('@vueuse/head')['useSeoMeta']
|
||||
const useSeoMeta: typeof import('@unhead/vue')['useSeoMeta']
|
||||
const useServerHead: typeof import('@unhead/vue')['useServerHead']
|
||||
const useServerHeadSafe: typeof import('@unhead/vue')['useServerHeadSafe']
|
||||
const useServerSeoMeta: typeof import('@unhead/vue')['useServerSeoMeta']
|
||||
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
|
||||
const useShare: typeof import('@vueuse/core')['useShare']
|
||||
const useSlots: typeof import('vue')['useSlots']
|
||||
@@ -344,6 +351,7 @@ declare module 'vue' {
|
||||
readonly h: UnwrapRef<typeof import('vue')['h']>
|
||||
readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
|
||||
readonly inject: UnwrapRef<typeof import('vue')['inject']>
|
||||
readonly injectHead: UnwrapRef<typeof import('@unhead/vue')['injectHead']>
|
||||
readonly injectLocal: UnwrapRef<typeof import('@vueuse/core')['injectLocal']>
|
||||
readonly isDark: UnwrapRef<typeof import('./composables/dark')['isDark']>
|
||||
readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']>
|
||||
@@ -362,6 +370,7 @@ declare module 'vue' {
|
||||
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
|
||||
readonly onClickOutside: UnwrapRef<typeof import('@vueuse/core')['onClickOutside']>
|
||||
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
|
||||
readonly onElementRemoval: UnwrapRef<typeof import('@vueuse/core')['onElementRemoval']>
|
||||
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
|
||||
readonly onKeyStroke: UnwrapRef<typeof import('@vueuse/core')['onKeyStroke']>
|
||||
readonly onLongPress: UnwrapRef<typeof import('@vueuse/core')['onLongPress']>
|
||||
@@ -484,7 +493,8 @@ declare module 'vue' {
|
||||
readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']>
|
||||
readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']>
|
||||
readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']>
|
||||
readonly useHead: UnwrapRef<typeof import('@vueuse/head')['useHead']>
|
||||
readonly useHead: UnwrapRef<typeof import('@unhead/vue')['useHead']>
|
||||
readonly useHeadSafe: UnwrapRef<typeof import('@unhead/vue')['useHeadSafe']>
|
||||
readonly useI18n: UnwrapRef<typeof import('vue-i18n')['useI18n']>
|
||||
readonly useId: UnwrapRef<typeof import('vue')['useId']>
|
||||
readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']>
|
||||
@@ -541,7 +551,10 @@ declare module 'vue' {
|
||||
readonly useScriptTag: UnwrapRef<typeof import('@vueuse/core')['useScriptTag']>
|
||||
readonly useScroll: UnwrapRef<typeof import('@vueuse/core')['useScroll']>
|
||||
readonly useScrollLock: UnwrapRef<typeof import('@vueuse/core')['useScrollLock']>
|
||||
readonly useSeoMeta: UnwrapRef<typeof import('@vueuse/head')['useSeoMeta']>
|
||||
readonly useSeoMeta: UnwrapRef<typeof import('@unhead/vue')['useSeoMeta']>
|
||||
readonly useServerHead: UnwrapRef<typeof import('@unhead/vue')['useServerHead']>
|
||||
readonly useServerHeadSafe: UnwrapRef<typeof import('@unhead/vue')['useServerHeadSafe']>
|
||||
readonly useServerSeoMeta: UnwrapRef<typeof import('@unhead/vue')['useServerSeoMeta']>
|
||||
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
|
||||
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
|
||||
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<script setup lang="ts">
|
||||
const router = useRouter()
|
||||
const { t } = useI18n()
|
||||
useHead({
|
||||
title: () => t('not-found'),
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
+6
-1
@@ -2,10 +2,15 @@
|
||||
title: About
|
||||
---
|
||||
|
||||
<script setup>
|
||||
const { t } = useI18n()
|
||||
useHead({ title: () => t('button.about') })
|
||||
</script>
|
||||
|
||||
<div class="text-center">
|
||||
<!-- You can use Vue components inside markdown -->
|
||||
<div i-carbon-dicom-overlay class="text-4xl -mb-6 m-auto" />
|
||||
<h3>About</h3>
|
||||
<h3>{{ t('button.about') }}</h3>
|
||||
</div>
|
||||
|
||||
[Vitesse](https://github.com/antfu/vitesse) is an opinionated [Vite](https://github.com/vitejs/vite) starter template made by [@antfu](https://github.com/antfu) for mocking apps swiftly. With **file-based routing**, **components auto importing**, **markdown support**, I18n, PWA and uses **UnoCSS** for styling and icons.
|
||||
|
||||
@@ -7,6 +7,9 @@ const { t } = useI18n()
|
||||
watchEffect(() => {
|
||||
user.setNewName(route.params.name)
|
||||
})
|
||||
useHead({
|
||||
title: () => t('intro.hi', { name: user.savedName }),
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
@@ -12,6 +12,9 @@ function go() {
|
||||
}
|
||||
|
||||
const { t } = useI18n()
|
||||
useHead({
|
||||
title: () => t('button.home'),
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
+3
-1
@@ -1,6 +1,7 @@
|
||||
import path from 'node:path'
|
||||
import VueI18n from '@intlify/unplugin-vue-i18n/vite'
|
||||
import Shiki from '@shikijs/markdown-it'
|
||||
import { unheadVueComposablesImports } from '@unhead/vue'
|
||||
import Vue from '@vitejs/plugin-vue'
|
||||
import LinkAttributes from 'markdown-it-link-attributes'
|
||||
import Unocss from 'unocss/vite'
|
||||
@@ -44,11 +45,12 @@ export default defineConfig({
|
||||
|
||||
// https://github.com/antfu/unplugin-auto-import
|
||||
AutoImport({
|
||||
include: [/\.[jt]sx?$/, /\.vue$/, /\.vue\?vue/, /\.md$/],
|
||||
imports: [
|
||||
'vue',
|
||||
'vue-i18n',
|
||||
'@vueuse/head',
|
||||
'@vueuse/core',
|
||||
unheadVueComposablesImports,
|
||||
VueRouterAutoImports,
|
||||
{
|
||||
// add any other imports you were relying on
|
||||
|
||||
Reference in new issue
Block a user