import Vue from '@vitejs/plugin-vue'; import vuetify, { transformAssetUrls } from 'vite-plugin-vuetify'; import Unfonts from 'unplugin-fonts/vite'; import { defineConfig } from 'vite'; import { fileURLToPath, URL } from 'node:url'; import { injectedStyleId } from './src/config'; import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js'; import Components from 'unplugin-vue-components/vite'; import NotificationsResolver from '@kyvg/vue3-notification/auto-import-resolver'; import dns from 'node:dns'; dns.setDefaultResultOrder('verbatim'); export default defineConfig({ css: { preprocessorOptions: { scss: { api: 'modern-compiler', silenceDeprecations: ['legacy-js-api'] }, sass: { api: 'modern-compiler', silenceDeprecations: ['legacy-js-api'] } } }, plugins: [ Components({ resolvers: [NotificationsResolver('Alert')] }), Vue({ template: { transformAssetUrls } }), vuetify({ styles: { configFile: 'src/assets/_settings.scss' } }), Components(), cssInjectedByJsPlugin({ styleId: injectedStyleId }), Unfonts({ google: { families: [ { name: 'Plus Jakarta Sans', styles: 'ital,wght@0,200..800;1,200..800' }, { name: 'Material Symbols Outlined', styles: 'opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200' } ] } }) ], define: { 'process.env': {} }, build: { target: 'esnext', lib: { entry: 'src/main.ts', name: 'Viewer3CR', fileName: 'Viewer3CR', formats: ['cjs', 'es', 'umd'] }, rollupOptions: { output: { globals: { vue: 'Vue' }, footer: ` if (globalThis.Viewer3CR) { for (const key of Object.keys(globalThis.Viewer3CR)) { globalThis[key] = globalThis.Viewer3CR[key] } } ` } } }, resolve: { alias: [ { find: '@test', replacement: fileURLToPath(new URL('./test', import.meta.url)) }, { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) } ], extensions: ['.js', '.json', '.jsx', '.mjs', '.ts', '.tsx', '.vue'] }, server: { host: 'localhost', port: 3000 } });