vite.config.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /// <reference types="vitest" />
  2. import fs from 'fs'
  3. import { defineConfig } from 'vite'
  4. import vue from '@vitejs/plugin-vue'
  5. import banner from 'vite-plugin-banner'
  6. import Inspect from 'vite-plugin-inspect'
  7. import dts from 'vite-plugin-dts'
  8. import copy from 'rollup-plugin-copy'
  9. /* import analyze from 'rollup-plugin-analyzer'
  10. */ /* import { visualizer } from 'rollup-plugin-visualizer' */
  11. import { resolve, join } from 'pathe'
  12. import { lightGreen, yellow, gray, bold } from 'kolorist'
  13. import { ViteTresPlugin } from './plugins/vite-tres-types-plugin'
  14. import pkg from './package.json'
  15. function noop() {}
  16. // eslint-disable-next-line no-console
  17. console.log(`${lightGreen('▲')} ${gray('■')} ${yellow('●')} ${bold('Tres')} v${pkg.version}`)
  18. // https://vitejs.dev/config/
  19. export default defineConfig({
  20. server: {
  21. port: 5174,
  22. },
  23. resolve: {
  24. alias: {
  25. '/@': resolve(__dirname, './src'),
  26. },
  27. dedupe: ['@tresjs/cientos', 'vue'],
  28. },
  29. plugins: [
  30. vue({
  31. isProduction: false,
  32. template: {
  33. compilerOptions: {
  34. isCustomElement: tag => tag.startsWith('Tres') && tag !== 'TresCanvas',
  35. },
  36. },
  37. }),
  38. dts({
  39. insertTypesEntry: true,
  40. afterBuild() {
  41. console.log('🪄 ✨ Magically generating types for TresJS')
  42. const outputDir = join(__dirname, 'dist/types')
  43. const outputFile = join(outputDir, 'index.d.ts')
  44. if (fs.existsSync(outputFile)) {
  45. const index = fs.readFileSync(outputFile, 'utf-8')
  46. fs.writeFileSync(outputFile, `import './tres-components';\n${index}`)
  47. }
  48. },
  49. }),
  50. ViteTresPlugin(),
  51. banner({
  52. content: `/**\n * name: ${pkg.name}\n * version: v${
  53. pkg.version
  54. }\n * (c) ${new Date().getFullYear()}\n * description: ${pkg.description}\n * author: ${pkg.author}\n */`,
  55. }),
  56. Inspect(),
  57. ],
  58. test: {
  59. environment: process.env.BROWSER_TEST ? 'node' : 'jsdom',
  60. globals: true,
  61. threads: false,
  62. alias: {
  63. '/@': resolve(__dirname, './src'),
  64. },
  65. isolate: !process.env.BROWSER_TEST,
  66. browser: {
  67. enabled: !!process.env.BROWSER_TEST,
  68. // @ts-expect-error ignore, we don't have the type here in vitest
  69. enableUI: true,
  70. name: 'chrome',
  71. headless: !!process.env.HEADLESS,
  72. provider: 'webdriverio',
  73. },
  74. reporters: process.env.BROWSER_TEST
  75. ? [
  76. 'json',
  77. {
  78. onInit: noop,
  79. onPathsCollected: noop,
  80. onCollected: noop,
  81. onFinished: noop,
  82. onTaskUpdate: noop,
  83. onTestRemoved: noop,
  84. onWatcherStart: noop,
  85. onWatcherRerun: noop,
  86. onServerRestart: noop,
  87. onUserConsoleLog: noop,
  88. },
  89. 'default',
  90. ]
  91. : undefined,
  92. },
  93. build: {
  94. lib: {
  95. entry: resolve(__dirname, 'src/index.ts'),
  96. name: 'tres',
  97. fileName: 'tres',
  98. },
  99. watch: {
  100. include: [resolve(__dirname, 'src')],
  101. },
  102. copyPublicDir: false,
  103. rollupOptions: {
  104. plugins: [
  105. copy({
  106. targets: [{ src: 'src/types/tres-components.d.ts', dest: 'dist/types' }],
  107. }),
  108. /* analyze(), */
  109. /* visualizer({
  110. open: true,
  111. gzipSize: true,
  112. brotliSize: true,
  113. }), */
  114. ],
  115. external: ['vue', '@vueuse/core', 'three'],
  116. output: {
  117. exports: 'named',
  118. // Provide global variables to use in the UMD build
  119. // for externalized deps
  120. globals: {
  121. vue: 'Vue',
  122. '@vueuse/core': 'VueUseCore',
  123. three: 'Three',
  124. },
  125. },
  126. },
  127. },
  128. optimizeDeps: {
  129. exclude: ['vue', 'three'],
  130. },
  131. })