vite.config.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import path from 'path'
  2. import Inspect from 'vite-plugin-inspect'
  3. import { defineConfig, loadEnv } from 'vite'
  4. import VueMacros from 'unplugin-vue-macros/vite'
  5. import UnoCSS from 'unocss/vite'
  6. import mkcert from 'vite-plugin-mkcert'
  7. import glob from 'fast-glob'
  8. import vueJsx from '@vitejs/plugin-vue-jsx'
  9. import Components from 'unplugin-vue-components/vite'
  10. import Icons from 'unplugin-icons/vite'
  11. import IconsResolver from 'unplugin-icons/resolver'
  12. import {
  13. docPackage,
  14. epPackage,
  15. getPackageDependencies,
  16. projRoot,
  17. } from '@element-plus/build-utils'
  18. import { MarkdownTransform } from './.vitepress/plugins/markdown-transform'
  19. import type { Alias } from 'vite'
  20. const alias: Alias[] = [
  21. {
  22. find: '~/',
  23. replacement: `${path.resolve(__dirname, './.vitepress/vitepress')}/`,
  24. },
  25. ]
  26. if (process.env.DOC_ENV !== 'production') {
  27. alias.push(
  28. {
  29. find: /^element-plus(\/(es|lib))?$/,
  30. replacement: path.resolve(projRoot, 'packages/element-plus/index.ts'),
  31. },
  32. {
  33. find: /^element-plus\/(es|lib)\/(.*)$/,
  34. replacement: `${path.resolve(projRoot, 'packages')}/$2`,
  35. }
  36. )
  37. }
  38. export default defineConfig(async ({ mode }) => {
  39. const env = loadEnv(mode, process.cwd(), '')
  40. const { dependencies: epDeps } = getPackageDependencies(epPackage)
  41. const { dependencies: docsDeps } = getPackageDependencies(docPackage)
  42. const optimizeDeps = [...new Set([...epDeps, ...docsDeps])].filter(
  43. (dep) =>
  44. !dep.startsWith('@types/') &&
  45. !['@element-plus/metadata', 'element-plus'].includes(dep)
  46. )
  47. optimizeDeps.push(
  48. ...(await glob(['dayjs/plugin/*.js'], {
  49. cwd: path.resolve(projRoot, 'node_modules'),
  50. onlyFiles: true,
  51. }))
  52. )
  53. return {
  54. server: {
  55. host: true,
  56. https: !!env.HTTPS,
  57. fs: {
  58. allow: [projRoot],
  59. },
  60. },
  61. resolve: {
  62. alias,
  63. },
  64. plugins: [
  65. VueMacros({
  66. setupComponent: false,
  67. setupSFC: false,
  68. plugins: {
  69. vueJsx: vueJsx(),
  70. },
  71. }),
  72. // https://github.com/antfu/unplugin-vue-components
  73. Components({
  74. dirs: ['.vitepress/vitepress/components'],
  75. allowOverrides: true,
  76. // custom resolvers
  77. resolvers: [
  78. // auto import icons
  79. // https://github.com/antfu/unplugin-icons
  80. IconsResolver(),
  81. ],
  82. // allow auto import and register components used in markdown
  83. include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
  84. }),
  85. // https://github.com/antfu/unplugin-icons
  86. Icons({
  87. autoInstall: true,
  88. }),
  89. UnoCSS(),
  90. MarkdownTransform(),
  91. Inspect(),
  92. mkcert(),
  93. ],
  94. optimizeDeps: {
  95. include: optimizeDeps,
  96. },
  97. }
  98. })