123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- 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'
- import AutoImport from 'unplugin-auto-import/vite'
- import Components from 'unplugin-vue-components/vite'
- import VueMacros from 'unplugin-vue-macros/vite'
- import Markdown from 'unplugin-vue-markdown/vite'
- import { VueRouterAutoImports } from 'unplugin-vue-router'
- import VueRouter from 'unplugin-vue-router/vite'
- import { defineConfig } from 'vite'
- import { VitePWA } from 'vite-plugin-pwa'
- // import VueDevTools from 'vite-plugin-vue-devtools'
- import Layouts from 'vite-plugin-vue-layouts'
- import generateSitemap from 'vite-ssg-sitemap'
- import 'vitest/config'
- export default defineConfig({
- resolve: {
- alias: {
- '~/': `${path.resolve(__dirname, 'src')}/`,
- },
- },
- plugins: [
- VueMacros({
- plugins: {
- vue: Vue({
- include: [/\.vue$/, /\.md$/],
- }),
- },
- }),
- // https://github.com/posva/unplugin-vue-router
- VueRouter({
- extensions: ['.vue', '.md'],
- dts: 'src/typed-router.d.ts',
- }),
- // https://github.com/JohnCampionJr/vite-plugin-vue-layouts
- Layouts(),
- // https://github.com/antfu/unplugin-auto-import
- AutoImport({
- include: [/\.[jt]sx?$/, /\.vue$/, /\.vue\?vue/, /\.md$/],
- imports: [
- 'vue',
- 'vue-i18n',
- '@vueuse/core',
- unheadVueComposablesImports,
- VueRouterAutoImports,
- {
- // add any other imports you were relying on
- 'vue-router/auto': ['useLink'],
- },
- ],
- dts: 'src/auto-imports.d.ts',
- dirs: [
- 'src/composables',
- 'src/stores',
- ],
- 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 uno.config.ts for config
- Unocss(),
- // https://github.com/unplugin/unplugin-vue-markdown
- // Don't need this? Try vitesse-lite: https://github.com/antfu/vitesse-lite
- Markdown({
- wrapperClasses: 'prose prose-sm m-auto text-left',
- headEnabled: true,
- async markdownItSetup(md) {
- md.use(LinkAttributes, {
- matcher: (link: string) => /^https?:\/\//.test(link),
- attrs: {
- target: '_blank',
- rel: 'noopener',
- },
- })
- md.use(await Shiki({
- defaultColor: false,
- themes: {
- light: 'vitesse-light',
- dark: 'vitesse-dark',
- },
- }))
- },
- }),
- // https://github.com/antfu/vite-plugin-pwa
- VitePWA({
- registerType: 'autoUpdate',
- includeAssets: ['favicon.svg', 'safari-pinned-tab.svg'],
- manifest: {
- name: 'Vitesse',
- short_name: 'Vitesse',
- theme_color: '#ffffff',
- icons: [
- {
- src: '/pwa-192x192.png',
- sizes: '192x192',
- type: 'image/png',
- },
- {
- src: '/pwa-512x512.png',
- sizes: '512x512',
- type: 'image/png',
- },
- {
- src: '/pwa-512x512.png',
- sizes: '512x512',
- type: 'image/png',
- purpose: 'any maskable',
- },
- ],
- },
- }),
- // 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/webfansplz/vite-plugin-vue-devtools
- // VueDevTools(),
- ],
- // https://github.com/vitest-dev/vitest
- test: {
- include: ['test/**/*.test.ts'],
- environment: 'jsdom',
- },
- // https://github.com/antfu/vite-ssg
- ssgOptions: {
- script: 'async',
- formatting: 'minify',
- beastiesOptions: {
- reduceInlineStyles: false,
- },
- onFinished() {
- generateSitemap()
- },
- },
- ssr: {
- // TODO: workaround until they support native ESM
- noExternal: ['workbox-window', /vue-i18n/],
- },
- })
|