vite.config.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { createRequire } from 'node:module'
  2. import { fileURLToPath, URL } from 'node:url'
  3. import type { Plugin, UserConfigExport } from 'vite'
  4. import { defineConfig } from 'vite'
  5. import vue from '@vitejs/plugin-vue'
  6. import vueJsx from '@vitejs/plugin-vue-jsx'
  7. const require = createRequire(import.meta.url)
  8. const viewerQueryFallbackPlugin = (): Plugin => ({
  9. name: 'viewer-query-fallback',
  10. configureServer(server) {
  11. server.middlewares.use((req, _res, next) => {
  12. // Vite 会把根路径 `?url=` 当成资源查询;Demo 需要保留直接预览参数入口。
  13. if (req.url?.startsWith('/?url=')) {
  14. req.url = `/index.html${req.url.slice(1)}`
  15. }
  16. next()
  17. })
  18. }
  19. })
  20. // https://vitejs.dev/config/
  21. export default defineConfig(ctx => {
  22. const alias: Record<string, string> = {
  23. '@/package': fileURLToPath(new URL('../../packages/components/vue3/src/package', import.meta.url)),
  24. '@': fileURLToPath(new URL('./src', import.meta.url)),
  25. '@file-viewer/vue3': fileURLToPath(new URL('../../packages/components/vue3/src/package/index.ts', import.meta.url)),
  26. '@file-viewer/web': fileURLToPath(new URL('../../packages/components/web/src/index.ts', import.meta.url)),
  27. '@flyfish-group/file-viewer3': fileURLToPath(new URL('../../packages/components/vue3/src/package/index.ts', import.meta.url)),
  28. buffer: require.resolve('buffer/'),
  29. events: require.resolve('events/'),
  30. path: require.resolve('path-browserify'),
  31. 'react/jsx-dev-runtime': require.resolve('react/jsx-dev-runtime'),
  32. 'react/jsx-runtime': require.resolve('react/jsx-runtime'),
  33. react: require.resolve('react'),
  34. 'react-dom': require.resolve('react-dom'),
  35. stream: require.resolve('stream-browserify'),
  36. zlib: require.resolve('browserify-zlib')
  37. }
  38. if (ctx.mode !== 'lib') {
  39. alias['@file-viewer/core/assets'] = fileURLToPath(new URL('../../packages/core/src/assets.ts', import.meta.url))
  40. alias['@file-viewer/core'] = fileURLToPath(new URL('../../packages/core/src/index.ts', import.meta.url))
  41. }
  42. const config: UserConfigExport = {
  43. plugins: [viewerQueryFallbackPlugin(), vue(), vueJsx()],
  44. base: './',
  45. define: {
  46. global: 'globalThis'
  47. },
  48. resolve: {
  49. alias
  50. }
  51. }
  52. config.build = {
  53. rollupOptions: {
  54. input: {
  55. main: fileURLToPath(new URL('index.html', import.meta.url)),
  56. compare: fileURLToPath(new URL('compare.html', import.meta.url))
  57. }
  58. },
  59. outDir: 'dist'
  60. }
  61. return config
  62. })