shared.mts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. import type { PwaOptions } from '@vite-pwa/vitepress';
  2. import type { HeadConfig } from 'vitepress';
  3. import { resolve } from 'node:path';
  4. import {
  5. viteArchiverPlugin,
  6. viteDayjsPlugin,
  7. viteVxeTableImportsPlugin,
  8. } from '@vben/vite-config';
  9. import {
  10. GitChangelog,
  11. GitChangelogMarkdownSection,
  12. } from '@nolebase/vitepress-plugin-git-changelog/vite';
  13. import tailwindcss from '@tailwindcss/vite';
  14. import { defineConfig, postcssIsolateStyles } from 'vitepress';
  15. import {
  16. groupIconMdPlugin,
  17. groupIconVitePlugin,
  18. } from 'vitepress-plugin-group-icons';
  19. import { demoPreviewPlugin } from './plugins/demo-preview';
  20. import { search as zhSearch } from './zh.mts';
  21. export const shared = defineConfig({
  22. appearance: 'dark',
  23. head: head(),
  24. markdown: {
  25. preConfig(md) {
  26. md.use(demoPreviewPlugin);
  27. md.use(groupIconMdPlugin);
  28. },
  29. },
  30. pwa: pwa(),
  31. srcDir: 'src',
  32. themeConfig: {
  33. i18nRouting: true,
  34. logo: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp',
  35. search: {
  36. options: {
  37. locales: {
  38. ...zhSearch,
  39. },
  40. },
  41. provider: 'local',
  42. },
  43. siteTitle: 'Vben Admin',
  44. socialLinks: [
  45. { icon: 'github', link: 'https://github.com/vbenjs/vue-vben-admin' },
  46. ],
  47. },
  48. title: 'Vben Admin',
  49. vite: {
  50. build: {
  51. chunkSizeWarningLimit: Infinity,
  52. minify: 'terser',
  53. },
  54. css: {
  55. postcss: {
  56. plugins: [postcssIsolateStyles({ includeFiles: [/vp-doc\.css/] })],
  57. },
  58. preprocessorOptions: {
  59. scss: {
  60. // api: 'modern',
  61. },
  62. },
  63. },
  64. json: {
  65. stringify: true,
  66. },
  67. plugins: [
  68. viteDayjsPlugin(),
  69. tailwindcss(),
  70. GitChangelog({
  71. mapAuthors: [
  72. {
  73. mapByNameAliases: ['Vben'],
  74. name: 'vben',
  75. username: 'anncwb',
  76. },
  77. {
  78. name: 'vince',
  79. username: 'vince292007',
  80. },
  81. {
  82. name: 'Li Kui',
  83. username: 'likui628',
  84. },
  85. {
  86. mapByNameAliases: ['Jin Mao', 'jinmao'],
  87. name: 'Jin Mao',
  88. username: 'jinmao88',
  89. },
  90. {
  91. name: 'Netfan',
  92. username: 'mynetfan',
  93. },
  94. {
  95. mapByNameAliases: ['xingyu4j', 'xingyu'],
  96. name: 'xingyu4j',
  97. username: 'xingyu4j',
  98. },
  99. ],
  100. repoURL: () => 'https://github.com/vbenjs/vue-vben-admin',
  101. }) as any,
  102. GitChangelogMarkdownSection(),
  103. viteArchiverPlugin({ outputDir: '.vitepress' }),
  104. groupIconVitePlugin(),
  105. await viteVxeTableImportsPlugin(),
  106. ],
  107. server: {
  108. fs: {
  109. allow: ['../..'],
  110. },
  111. host: true,
  112. port: 6173,
  113. },
  114. ssr: {
  115. external: ['@vue/repl'],
  116. noExternal: ['@v-c/picker'],
  117. },
  118. },
  119. });
  120. function head(): HeadConfig[] {
  121. return [
  122. ['meta', { content: 'Vbenjs Team', name: 'author' }],
  123. [
  124. 'meta',
  125. {
  126. content: 'vben, vitejs, vite, shadcn-ui, vue',
  127. name: 'keywords',
  128. },
  129. ],
  130. ['link', { href: '/favicon.ico', rel: 'icon', type: 'image/svg+xml' }],
  131. [
  132. 'meta',
  133. {
  134. content:
  135. 'width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no',
  136. name: 'viewport',
  137. },
  138. ],
  139. ['meta', { content: 'vben admin docs', name: 'keywords' }],
  140. ['link', { href: '/favicon.ico', rel: 'icon' }],
  141. // [
  142. // 'script',
  143. // {
  144. // src: 'https://cdn.tailwindcss.com',
  145. // },
  146. // ],
  147. ];
  148. }
  149. function pwa(): PwaOptions {
  150. return {
  151. includeManifestIcons: false,
  152. manifest: {
  153. description:
  154. 'Vben Admin is a modern admin dashboard template based on Vue 3. ',
  155. icons: [
  156. {
  157. sizes: '192x192',
  158. src: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/pwa-icon-192.png',
  159. type: 'image/png',
  160. },
  161. {
  162. sizes: '512x512',
  163. src: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/pwa-icon-512.png',
  164. type: 'image/png',
  165. },
  166. ],
  167. id: '/',
  168. name: 'Vben Admin Doc',
  169. short_name: 'vben_admin_doc',
  170. theme_color: '#ffffff',
  171. },
  172. outDir: resolve(process.cwd(), '.vitepress/dist'),
  173. registerType: 'autoUpdate',
  174. workbox: {
  175. globPatterns: ['**/*.{css,js,html,svg,png,ico,txt,woff2}'],
  176. maximumFileSizeToCacheInBytes: 5 * 1024 * 1024,
  177. },
  178. };
  179. }