19yuke2-frontend/vite.config.ts

145 lines
3.7 KiB
TypeScript
Raw Normal View History

2023-06-24 16:54:03 +08:00
import path from 'node:path'
2023-02-05 18:11:34 +08:00
import { defineConfig } from 'vite'
import Vue from '@vitejs/plugin-vue'
import generateSitemap from 'vite-ssg-sitemap'
2023-06-24 16:54:03 +08:00
// import Layouts from 'vite-plugin-vue-layouts'
import MetaLayouts from 'vite-plugin-vue-meta-layouts'
2023-02-05 18:11:34 +08:00
import Components from 'unplugin-vue-components/vite'
2023-07-28 16:51:10 +08:00
import VueRouter from 'unplugin-vue-router/vite'
2023-02-05 18:11:34 +08:00
import AutoImport from 'unplugin-auto-import/vite'
2023-07-28 16:51:10 +08:00
import { VueRouterAutoImports } from 'unplugin-vue-router'
2023-02-05 18:11:34 +08:00
import Markdown from 'vite-plugin-vue-markdown'
import VueI18n from '@intlify/unplugin-vue-i18n/vite'
import Inspect from 'vite-plugin-inspect'
import Inspector from 'vite-plugin-vue-inspector'
import LinkAttributes from 'markdown-it-link-attributes'
import Unocss from 'unocss/vite'
import Shiki from 'markdown-it-shiki'
import VueMacros from 'unplugin-vue-macros/vite'
2023-02-18 14:56:16 +08:00
import vuetify from 'vite-plugin-vuetify'
2023-02-09 22:41:12 +08:00
2023-02-05 18:11:34 +08:00
export default defineConfig({
resolve: {
alias: {
'~/': `${path.resolve(__dirname, 'src')}/`,
},
},
plugins: [
VueMacros({
plugins: {
vue: Vue({
include: [/\.vue$/, /\.md$/],
reactivityTransform: true,
}),
},
}),
// https://github.com/JohnCampionJr/vite-plugin-vue-layouts
2023-06-24 16:54:03 +08:00
MetaLayouts(),
2023-02-05 18:11:34 +08:00
// https://github.com/antfu/unplugin-auto-import
AutoImport({
imports: [
'vue',
'vue-i18n',
'vue/macros',
'@vueuse/head',
'@vueuse/core',
2023-07-28 16:51:10 +08:00
VueRouterAutoImports
2023-02-05 18:11:34 +08:00
],
dts: 'src/auto-imports.d.ts',
dirs: ['src/composables'],
2023-02-05 18:11:34 +08:00
vueTemplate: true,
}),
// https://github.com/antfu/unplugin-vue-components
Components({
// allow auto load markdown components under `./src/components/`
extensions: ['vue', 'md'],
// allow auto import and register components used in markdown
include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
dts: 'src/components.d.ts',
}),
// https://github.com/antfu/unocss
// see unocss.config.ts for config
Unocss(),
// https://github.com/antfu/vite-plugin-vue-markdown
// Don't need this? Try vitesse-lite: https://github.com/antfu/vitesse-lite
Markdown({
headEnabled: true,
markdownItSetup(md) {
// https://prismjs.com/
md.use(Shiki, {
theme: {
light: 'vitesse-light',
dark: 'vitesse-dark',
},
})
md.use(LinkAttributes, {
matcher: (link: string) => /^https?:\/\//.test(link),
attrs: {
target: '_blank',
rel: 'noopener',
},
})
},
}),
// https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n
VueI18n({
runtimeOnly: true,
compositionOnly: true,
fullInstall: true,
include: [path.resolve(__dirname, 'locales/**')],
}),
// https://github.com/antfu/vite-plugin-inspect
// Visit http://localhost:3333/__inspect/ to see the inspector
Inspect(),
// https://github.com/webfansplz/vite-plugin-vue-inspector
Inspector({
toggleButtonVisibility: 'never',
}),
2023-02-16 22:28:04 +08:00
vuetify({ autoImport: true }),
2023-07-28 16:51:10 +08:00
VueRouter({
extensions: ['.vue', '.md'],
dts: 'src/typed-router.d.ts',
routesFolder: [
'src/pages',
{ src: 'src/posts', path: 'posts/' },
]
})
2023-02-05 18:11:34 +08:00
],
// https://github.com/vitest-dev/vitest
test: {
include: ['test/**/*.test.ts'],
environment: 'jsdom',
deps: {
inline: ['@vue', '@vueuse', 'vue-demi'],
},
},
// https://github.com/antfu/vite-ssg
ssgOptions: {
script: 'async',
formatting: 'minify',
onFinished() {
generateSitemap()
},
2023-02-05 18:11:34 +08:00
},
ssr: {
// TODO: workaround until they support native ESM
2023-02-18 11:25:03 +08:00
noExternal: ['workbox-window', /vue-i18n/, 'vuetify'],
2023-02-05 18:11:34 +08:00
},
})